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