将我的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); }
}
}
Run Code Online (Sandbox Code Playgroud)
你的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4603 次 |
| 最近记录: |