2016-08-18 24 views
-1

我已經創建了一個空的數據庫。我需要在這個空的數據庫上運行腳本。從網站 到目前爲止,我已經找到代碼:在c#中的sql文件的現有數據庫上運行一個腳本#

public bool RunScript() 
     { 
      try 
      { 

       SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-PCEOPRM\SQLEXPRESS;Initial Catalog=" + DbName + ";Integrated Security=True"); 


       con.Open(); 
       string script = File.ReadAllText(@"C:\inetpub\wwwroot\MetisTemplateDBScript\MetisEmptyDBScript.sql"); 
       IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", 
          RegexOptions.Multiline | RegexOptions.IgnoreCase); 

       foreach (string commandString in commandStrings) 
       { 
        if (commandString.Trim() != "") 
        { 
         using (var command = new SqlCommand(commandString, con)) 
         { 
          command.ExecuteNonQuery(); 
         } 
        } 
       } 
       con.Close(); 

       return true; 
      }catch(Exception exc) 
      { 
       return false; 
      } 
     } 

但是當我運行它,它會拋出一些例外由於「\ n」,「\ r」或簡單的斜線等 有一些從sql文件運行大型腳本的正確方法? 我的文件還包含GO語句。

這不是一個重複的問題,因爲它有兩件事1)去命令和2)轉義字符。

謝謝!

+0

你得到了什麼錯誤? –

+0

而不是發佈此代碼,顯示SQL查詢將幫助我想。因爲在這段代碼中沒有任何「\ n,\ r」。 –

+0

它顯示字符串中的語法錯誤..我的字符串有轉義字符或\ n,\ r,\ t。我也用簡單的空間替換了它們,但它不起作用。問題是從文件中讀取。我怎樣才能擺脫這些逃脫的東西? – Umar

回答

1

SQL Server附帶一個名爲SqlCmd的命令行SQL執行實用程序(https://msdn.microsoft.com/en-us/library/ms162773.aspx)。您可以使用它來執行任何有效的腳本。如果您確實需要從C#運行它,則可以使用System.Diagnostics.Process命名空間類來啓動執行SqlCmd的進程。

+0

你可以請出示一些代碼嗎? – Umar

+0

Process類有很好的文檔記錄,你只需要查看相關的在線文檔。下面以一個工作示例爲例,介紹了Process.Start方法的正確變體的鏈接。 https://msdn.microsoft.com/en-us/library/h6ak8zt5(v=vs.110).aspx – PhillipH

相關問題