加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:51:09 所属栏目:asp.Net 来源:网络整理
导读:将我的SQL查询存储在全局资源文件中而不是在我的代码隐藏中存储它是一个好主意吗?我知道存储过程将是一个更好的解决方案,但我没有这个项目的奢侈品. 我不想在我的页面上查询,并认为中央存储库是一个更好的主意. 解决方法 资源文件通常用于本地化.但是字符串
将我的SQL查询存储在全局资源文件中而不是在我的代码隐藏中存储它是一个好主意吗?我知道存储过程将是一个更好的解决方案,但我没有这个项目的奢侈品.

我不想在我的页面上查询,并认为中央存储库是一个更好的主意.

解决方法

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

我完全同意其他人你应该使用linq或类型数据集等.我个人多年来只需要多次使用文本查询,当我这样做时,通常类似于以下内容:

您设置了一个小框架,然后您需要做的就是维护一个Xml文件.与资源dll相比,单个特定的xml文件更易于管理和部署.您还有一个众所周知的地方(存储库),它存储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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读