2013-08-06 48 views
2

我開發了一個C#Windows應用程序,我需要在客戶端機器上爲其創建腳本文件並在客戶端計算機上安裝SQL Server 2008 R2時創建數據庫。無法從c#使用smo執行腳本

但是,當我從我的代碼執行腳本總是顯示錯誤:

Failed to connect database.

我已經添加了從

C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.SqlServer.Smo.dll 

引用的SMO組件和我的代碼是:

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(); 

回答

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

+0

我試過這一個它不適合我。問題是我的腳本中有很多表的創建,所以每個腳本的末尾都有GO語句,它在GO附近顯示不正確的語法。 – Raghubar

+0

@Raghubar,好的,這是一個非常簡單的問題來解決。請參閱我的編輯。 –

+0

好的,讓我檢查。 – Raghubar