我想从使用自定义操作的Visual Studio 2010 web安装项目创建一个新的数据库。 首先我做了一个从哪里用户选择他们的SQL服务器的名称和身份验证模式。我得到服务器名称使用以下内容:MVC使用SMOLite创建SQL数据库
public string ServerString { get; set; }
private void SetServerString()
{
string cs;
if (cbInstant.SelectedIndex == 0) // windows authentication
cs = cbServer.SelectedValue.ToString();
else
cs = string.Format(cbServer.SelectedValue + ";" + txtUser.Text + ";" + txtPassword.Text);
ServerString = cs;
}
private void btnNext_Click(object sender, EventArgs e)
{
SetServerString();
formContext.Parameters["ServerString"] = this.ServerString;
this.Close();
}
它运作良好,我得到例如“PCName \ SQLEXPRESS”。
在自定义操作:
public override void Install(System.Collections.IDictionary stateSaver)
{
string serverString = "";
if (this.Context.Parameters["ServerString"] != null)
serverString = this.Context.Parameters["ServerString"];
base.Install(stateSaver);
MakeSQLDatabase(connectionString);
}
private void MakeSQLDatabase(string serverString)
{
FileInfo file = new FileInfo("M:\\script.sql");
string script = file.OpenText().ReadToEnd();
file.OpenText().Close();
SqlConnection sqlConnection = new SqlConnection();
SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
sqlConnection.ConnectionString = sqlConnectionStringBuilder.ToString();
Server server = new Server(sqlConnection);
server.ConnectionContext.ServerInstance = (serverString);
server.ConnectionContext.Connect();
if (server.Databases["databasename"] != null)
{
server.KillAllProcesses("databasename");
server.KillDatabase("databasename");
}
Database database = new Database(server, "databasename");
database.Create();
database.ExecuteNonQuery(script);
}
我得到“服务器未找到或accessiable”的错误,但是如果我改变变量serverString到
@"PCName\SQLEXPRESS"
它的作品!我找不出什么问题。我不能使用Microsoft.SqlServer.Management.Smo,因为即使加入app.confg
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
我会感谢您的帮助版本2和4版本之间有冲突,或者你可以直接我一个更好的解决方案来完成这项任务提前致谢。
这是安装4.0应用程序的网络安装应用程序。我有两个选择,要么使用SMO或SMOLite !.如果您可以与我分享您是如何连接到服务器并创建数据库的,我将不胜感激。谢谢 – hncl 2012-04-14 07:27:30
@ user373721我更新了我的帖子,以说明我的工作方式 – YvesR 2012-04-14 08:22:33
是您的示例的第一行var sql 0“”;我得到错误,这不是一个虚拟声明。谢谢 – hncl 2012-04-14 15:43:00