2016-08-13 7 views
0

システムを稼働させようとしていて、それぞれの内容を取得しようとしています.sqlファイル指定された場所で検索し、それらをデータベースに実行します。これまでのところ、私は時間後に同じエラー時に実行された:C#.NETでエラーが発生した場合、トランザクションのSQL Serverデータベースで.sqlファイルを実行するにはどうすればよいですか?

例外メッセージ:

データベース「システム」は存在しません。名前が正しく入力されていることを確認してください。

私のコードは、現在、次のようになります。

string ScriptsLocation = "E:\\dashboard\\Scripts"; 
Server MS_SQL = new Server(Server); 
MS_SQL.ConnectionContext.LoginSecure = false; 
MS_SQL.ConnectionContext.Login = "test"; 
MS_SQL.ConnectionContext.Password = "test"; 
MS_SQL.ConnectionContext.DatabaseName = "testDatabase"; 

string[] Scripts = System.IO.Directory.GetFiles(ScriptsLocation); 

for (int i = 0; i < Scripts.Length; i++) 
{ 
    ScriptFullName = Scripts[i]; 

    using (var ScriptText = new StreamReader(ScriptFullName)) 
    { 
     string Query = ScriptText.ToString(); 

     using (SqlConnection Connection = new SqlConnection(MS_SQL.ConnectionContext.ConnectionString)) 
     { 
      Connection.Open(); 

      SqlTransaction Transaction = Connection.BeginTransaction(); 

      SqlCommand Command = Connection.CreateCommand(); 
      Command.Transaction = Transaction; 

      try 
      { 
       Command.CommandText = Query; 
       Command.ExecuteNonQuery(); 
       Transaction.Commit(); 
      } 
      catch (Exception ex) 
      { 
       Transaction.Rollback(); 
      } 
     } 
    } 
} 

私は3月4日、さまざまな方法を試してみましたが、私は同じエラーを取得します。接続オブジェクトを見るとDatabaseNameプロパティは指定されたデータベース名を読み込み、コマンドオブジェクトを見ると接続プロパティのデータベース名が指定されたデータベース名を読み取るので、どこからデータベース名を取得するのか分かりません。System

私が使用しているユーザーは、システム管理者です。私はこの問題をオンラインで他の誰かを見つけることができませんでした。私はこれをSQL Server 2012および2008 R2に対してテストしています。私がテストしていマイSQLスクリプトは

答えて

2

このラインにおける無USE文でシンプルな1ライナーUPDATE文で使用すると、ファイルの内容を渡していないここに

string Query = ScriptText.ToString(); 

間違っている、しかし、のフルネーム「はSystem.IO.StreamReader」であり、これはおそらくシステムはデータベースの名前であることを誤解されて奇妙なエラーメッセージの発信元であるクラスStreamReaderIOは、スキーマ名とStreamReaderをべきベスストアドプロシージャ名。

ファイルの内容を読み、コードに渡す必要があります。

string Query = ScriptText.ReadToEnd(); 

しかし、私はSQLスクリプトを実行するために別の方法を使用することをお勧めします。

SqlTransaction Transaction = null; 
try 
{ 
    using(SqlConnection conn = new SqlConnection(MS_SQL.ConnectionContext.ConnectionString)) 
    using(Server server = new Server(new ServerConnection(conn))) 
    { 
     conn.Open(); 
     using(Transaction = Connection.BeginTransaction()) 
     { 
      string[] Scripts = System.IO.Directory.GetFiles(ScriptsLocation); 
      for (int i = 0; i < Scripts.Length; i++) 
       server.ConnectionContext.ExecuteNonQuery(Scripts[i]); 
     } 
     Transaction.Commit(); 
    } 
} 
catch(Exception ex) 
{ 
    // Display error and rollback 
    Transaction.Rollback(); 
} 
関連する問題