我有很多过程、 View 、函数等文件。
我想在 SQL Server 2005/2008 上的适当数据库中执行这些文件(创建组件)。
还有一点是我想使用 C# 执行它们。
还有一点要提,我希望应用程序也能在远程 SQL Server 上执行这些文件。客户端机器也可能没有 osql、sqlcmd 命令工具。
有人可以指导我吗。
最佳答案
这取决于它们是什么类型的文件。例如,如果它们仅包含实际的 T-SQL 命令(并且不是您要在其中运行的 批处理 文件,例如 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
函数的实现由您决定。
关于c# - 使用 C# 在 SQL Server 上执行 sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808129/