2016-08-18 6 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文も含まれています。

2つのことがあるので重複した質問ではありません。1)Goコマンドと2)エスケープ文字。

ありがとうございます。

+0

どのようなエラーがありますか?このコードを投稿するのではなく –

+0

と表示され、SQLクエリーが表示されていると思います。このコードには "\ n、\ r"が存在しないためです。 –

+0

これは文字列に構文エラーを表示します。私の文字列にはエスケープ文字または\ n、\ r、\ tがあります。私もシンプルなスペースで置き換えましたが、うまくいきませんでした。問題はファイルからの読み込みです。どのように私はこれらの脱出物を取り除くことができますか? – Umar

答えて

1

SQL Serverには、SqlCmd(https://msdn.microsoft.com/en-us/library/ms162773.aspx)というコマンドラインSQL実行ユーティリティが付属しています。任意の有効なスクリプトを実行するために使用することができます。 C#から実際に実行する必要がある場合は、System.Diagnostics.Process名前空間クラスを使用して、SqlCmdを実行するプロセスを開始できます。

+0

あなたはそうするいくつかのコードを表示していただけますか? – Umar

+0

Processクラスについては十分に文書化されており、関連するオンラインドキュメントを参照するだけで済みます。実際の例で、Process.Startメソッドの正しい変種へのリンクを示します。 https://msdn.microsoft.com/en-us/library/h6ak8zt5(v=vs.110).aspx – PhillipH

関連する問題