我有很多程序、视图、函数等文件。
我想在 SQL Server 2005/2008 上的适当数据库中执行这些文件(创建组件)。
还有一点是我想使用 C# 来执行它们。
另一点需要提及的是,我希望应用程序也可以在远程 SQL Server 上执行此文件。另外客户端机器可能没有osql、sqlcmd命令工具。
有人可以指导我吗?
这取决于它们是什么类型的文件。例如,如果他们only包含实际的 T-SQL 命令(并且不是batch您在 SSMS 中运行的文件,其中包含批次分隔符,例如GO
),那么你只需要创建一个连接,一个命令,然后读取文件的内容并使用它来填充CommandText
命令的属性。
例如:
void ExecuteFile(string connectionString, string fileName)
{
using(SqlConnection conn = new SqlConnection(connectionString))
{
string data = System.IO.File.ReadAllText(fileName);
conn.Open();
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = data;
cmd.ExecuteNonQuery();
}
}
}
如果它是批处理文件,您需要将文件拆分为单独的批次并单独处理它们。最简单的方法就是使用string.Split
,但请记住,它在拆分时不会遵守 SQL 解析规则(例如,如果GO
出现在 SQL 语句中,它将把命令分成两批,这显然会失败)。
更一般地说,您可以通过以下方式修改代码来了解此处需要执行的操作:
string[] batches = SplitBatches(System.IO.File.ReadAllText(fileName));
conn.Open();
using(SqlCommand cmd = conn.CreateCommand())
{
foreach(string batch in batches)
{
cmd.CommandText = batch;
cmd.ExecuteNonQuery();
}
}
一个名为的函数的实现SplitBatches
你决定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)