gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:09:32 25 4
gpt4 key购买 nike

将我的 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>

关于ASP.NET - 在全局资源文件中存储 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com