ASP.NET-在全局资源文件中存储SQL查询?

ASP.NET-在全局资源文件中存储SQL查询?,第1张

ASP.NET-在全局资源文件中存储SQL查询?

资源文件通常用于本地化。但是,字符串只是字符串,只是字符串,您是否真的要将资源文件中的任何旧字符串发送到数据库?

我完全同意其他人的观点,即您应该使用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>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5640708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存