无法使用smo从c#执行脚本

时间:2013-08-06 12:27:26

标签: c# asp.net sql-server winforms

我开发了一个C#Windows应用程序,我需要在客户端计算机上创建一个数据库,我已经在客户端计算机上创建了一个脚本文件并安装了SQL Server 2008 R2。

但是当我从我的代码执行脚本时,它总是显示错误:

  

无法连接数据库。

我添加了来自

的SMO程序集
C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.SqlServer.Smo.dll 

我的代码是:

string sqlConString = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mydatabase;Data Source=(local)";
FileInfo file = new FileInfo(dbPath);

string script = file.OpenText().ReadToEnd();

SqlConnection con = new SqlConnection(sqlConString);

Server server = new Server(new ServerConnection(con));
server.ConnectionContext.ExecuteNonQuery(script);

file.OpenText().Close();

1 个答案:

答案 0 :(得分:5)

这样的事情怎么样:

using (SqlConnection cnn = new SqlConnection(sqlConString))
{
    var cmds = File.ReadAllText(@"path\to\file").Split(new string[] { "GO" },
        StringSplitOptions.RemoveEmptyEntries);

    cnn.Open();
    foreach (var cmd in cmds)
    {
        using (SqlCommand cmd = new SqlCommand(cmd, cnn))
        {
            cmd.ExecuteNonQuery();
        }
    }
}

使用这种方法可以得到你想要的东西,脚本被执行,但是你不必使用缓慢而膨胀的SMO接口。此外,您正在利用using语句,因此您不必担心未管理的资源被打开。

现在,为了解决failed to connect to database...,我在第一次看到它时明显错过了,如果发生了这意味着:

Initial Catalog=mydatabase;Data Source=(local)

可能不对。如果是,您的服务器可能不会接受Windows Authentication

我不知道本地计算机的设置,但服务器很可能是(local)\SQLEXPRESS