好吧,这里有很多选择-因此,这实际上取决于您最紧迫的需求是什么:-)
一种方法可能是在VS解决方案中将sql语句创建为文本文件,然后在“构建操作”中将它们标记为“嵌入式资源”。这样,sql将包含在结果程序集中,并且可以使用.NET框架的ResourceManifestStream在运行时从中检索该sql:
private string LoadsqlStatement(string statementName)
{
string sqlStatement = string.Empty;
string namespacePart = "ConsoleApplication1";
string resourceName = namespacePart + "." + statementName;
using(Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
if (stm != null)
{
sqlStatement = new StreamReader(stm).ReadToEnd();
}
}
return sqlStatement;
}
您需要用sql语句文件所在的实际名称空间替换“ ConsoleApplication1”。您需要使用完全限定的名称来引用它们。然后,您可以使用以下行加载您的sql语句:
string MysqLStatement = LoadsqlStatement("MysqLStatement.sql");
但是,这会使查询变得“静态”,例如,您无法在运行时配置和更改查询- 它们直接烘焙到已编译的二进制位中。但另一方面,在VS中,您的C#程序代码和sql语句之间有一个很好的清晰分隔。
如果您需要能够在运行时进行调整和更改,则可以将它们放在单个sql表中,该表包含例如关键字和实际的SQL查询作为字段。然后,您可以根据需要检索它们并执行它们。由于它们位于数据库表中,因此您甚至可以在运行时随意更改,修复或修改它们,而不必重新部署整个应用程序。
马克