【发布时间】:2023-03-28 18:15:01
【问题描述】:
我想在我的解决方案中存储冗长的 .sql 脚本并以编程方式执行它们。我已经弄清楚如何执行包含我的 sql 脚本的字符串,但我还没有弄清楚如何从将存储在解决方案中的文件中读取字符串(例如在 /Scripts 子文件夹下)。
【问题讨论】:
-
在重复的问题stackoverflow.com/questions/23301964/…中有一个关于嵌入式资源的详细答案@
我想在我的解决方案中存储冗长的 .sql 脚本并以编程方式执行它们。我已经弄清楚如何执行包含我的 sql 脚本的字符串,但我还没有弄清楚如何从将存储在解决方案中的文件中读取字符串(例如在 /Scripts 子文件夹下)。
【问题讨论】:
将 SQL 文件添加到您的项目中,然后创建一个新的资源文件。打开 SQL 文件并从左上角的下拉菜单中选择“文件”(默认为字符串)。然后点击添加资源并导航到/选择 SQL 文件。这允许您从资源文件中获取 SQL,而不会像这样丢失类型安全:
以上是Visual Studio 2010中的过程。我也在my blog上写过这个。
【讨论】:
string.Format。
首先,编辑 .sql 文件的属性,使其作为资源嵌入。
然后使用类似于以下的代码来检索脚本:
string commandText;
Assembly thisAssembly = Assembly.GetExecutingAssembly();
using (Stream s = thisAssembly.GetManifestResourceStream(
"{project default namespace}.{path in project}.{filename}.sql"))
{
using (StreamReader sr = new StreamReader(s))
{
commandText = sr.ReadToEnd();
}
}
【讨论】:
使用QueryFirst。您将您的 sql 放入该工具提供的 .sql 模板中。在幕后,QueryFirst 将其编译为资源并连接调用以在运行时检索它。您只需要担心在生成的包装类上调用 Execute(),您的结果可以通过生成的 POCO 访问。端到端类型安全。永远不必记住列名或数据类型,再加上将 sql 放在上帝想要的地方……在 .sql 文件中的相当大的优势。
免责声明:我写的是 QueryFirst
【讨论】:
将文件添加到Resources,并将文件设置为Resource,在代码编写中:
String SQLCommand = NAMESPACE.Properties.Resources.ScriptDB.ToString()
【讨论】: