资源文件通常用于本地化。但是,字符串只是字符串,只是字符串,您是否真的要将资源文件中的任何旧字符串发送到数据库?
我完全同意其他人的观点,即您应该使用linq或类型化的数据集等。就我个人而言,这些年来,我只需要使用几次文本查询,而当我这样做时,通常会如下所示:
您建立了一个小型框架,然后要做的就是维护一个Xml文件。单个特定的xml文件比资源dll易于管理和部署。您还拥有一个众所周知的位置(存储库),用于存储Sql查询和有关它们的一些元数据,而不仅仅是一些命名约定。
永远不要低估字符串文字上的(简单)类的效用。一旦开始使用该类,就可以添加简单的字符串无法(轻松)完成的工作。
记事本编译器,如果不是100%,则深表歉意。这只是一切相互作用的示意图。
public static class SqlResource{ private static Dictionary<string,SqlQuery> dictionary; public static void Initialize(string file) { List<SqlQuery> list; // deserialize the xml file using (StreamReader streamReader = new StreamReader(file)) { XmlSerializer deserializer = new XmlSerializer(typeof(List<SqlQuery>)); list = (List<SqlQuery>)deserializer.Deserialize(streamReader); } dictionary = new Dictionary<string,SqlQuery>(); foreach(var item in list ) { dictionary.Add(item.Name,item); } } public static SqlQuery GetQueryByName(string name) { SqlQuery query = dictionary[name]; if( query == null ) throw new ArgumentException("The query '" + name + "' is not valid."); if( query.IsObsolete ) {// TODO - log this. } return query; }}public sealed class SqlQuery{ [XmlAttributeAttribute("name")] public bool Name { get; set; } [XmlElement("Sql")] public bool Sql { get; set; } [XmlAttributeAttribute("obsolete")] public bool IsObsolete { get; set; } [XmlIgnore] public TimeSpan Timeout { get; set;} /// <summary> /// Serialization only - XmlSerializer can't serialize normally /// </summary> [XmlAttribute("timeout")] public string Timeout_String { get { return Timeout.ToString(); } set { Timeout = TimeSpan.Parse(value); } }}
您的xml文件可能看起来像
<?xml version="1.0" encoding="utf-8"?><ArrayOfSqlQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SqlQuery name="EmployeeByEmployeeID" timeout="00:00:30" > <Sql>SELECt * From Employee WHERe EmployeeID = @T0</Sql> </SqlQuery> <SqlQuery name="EmployeesForManager" timeout="00:05:00" obsolete="true" > <Sql>SELECt * From Employee WHERe ManagerID = @T0 </Sql> </SqlQuery></ArrayOfSqlQuery>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)