使用C#在SQL Server上执行sql文件

Sun*_*wal 3 c# installation stored-procedures sql-server-2005 sql-server-2008

我有很多程序,视图,函数等文件.

我想在SQL Server 2005/2008上的相应数据库中执行这些文件(创建组件).

另外一点是我想用C#执行它们.

还有一点需要提一下,我希望应用程序能够在远程SQL Server上执行此文件.客户端机器也可能没有osql,sqlcmd命令工具.

有人可以指导我这个.

Ada*_*son 7

这取决于它们是什么类型的文件.例如,如果它们包含实际的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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它是批处理文件,则需要将文件拆分为单独的批处理并单独处理.最简单的方法就是使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

调用函数的实现SplitBatches取决于您.