使用c#执行多个.sql脚本

时间:2009-11-12 13:24:35

标签: c# sql

我想运行一个调用多个* .sql脚本的脚本 我在子办公室有很多服务器 如果* .sql崩溃,将需要对脚本进行错误控制 也喜欢使用配置文件,所以我可以编辑每个网站

TA 杰拉德

这里有一些我找到的源代码

using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sqlConnectionString = "Data Source=TECHSUP4\\SQLEXPRESS;Initial Catalog=TESTCU;Integrated Security=True";
            FileInfo file = new FileInfo("C:\\Database\\Scripts\\test.sql");
            string script = file.OpenText().ReadToEnd();
            SqlConnection conn = new SqlConnection(sqlConnectionString);
            Server server = new Server(new ServerConnection(conn));
            server.ConnectionContext.ExecuteNonQuery(script);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

使用PowerShell运行它怎么样?

$ cmd = get-content“C:\ temp \ CombinedScripts.sql”
   foreach($ svr in get-content“C:\ temp \ ServerList.txt”)
    {
       $ con =“server = $ svr; database = master; Integrated Security = sspi”
       $ da = new-object System.Data.SqlClient.SqlDataAdapter($ cmd,$ con)
       $ dt = new-object System.Data.DataTable
       $ da.fill($ dt)|外空
       $ SVR
       $ dt |格式表
     }

答案 1 :(得分:0)

如果test.sql文件中的某一行遇到问题,那么您发布的代码将抛出异常并使数据库处于未知状态。

我个人会解析文件中的每个SQL语句,并一次执行一条语句。在每次执行时,我会包装一个异常处理程序,记录异常和导致异常的行。根据您正在尝试执行的操作,您可能能够继续执行语句,或者您可能希望在那里终止执行。

应该注意的是,它确实取决于“test.sql”中的内容。如果它的简单单行命令彼此独立,那么你应该能够像我所描述的那样一次执行一个命令。如果它的命令串创建变量,执行存储过程等,这可能不是正确的方法。在这种情况下,您可能希望将更多逻辑移动到.sql文件中以执行需要执行的操作。

答案 2 :(得分:0)

如果您的服务器是MS SQL Server 2005或更高版本,则可以使用 sqlcmd 实用程序来运行sql语句。它还可以充当脚本语言并将一组sql语句作为脚本运行。

  

sqlcmd实用程序可让您输入   Transact-SQL语句,系统   程序和脚本文件   命令提示符,在查询编辑器中   SQLCMD模式,在Windows脚本文件中   或在操作系统(Cmd.exe)中   SQL Server代理作业的作业步骤。   此实用程序使用OLE DB执行   Transact-SQL批处理。

其余的就在这里:sqlcmd Utility