我想從使用自定義操作的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