2

我开发了一个 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();
4

1 回答 1

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.

于 2013-08-06T12:30:08.150 回答