2017-08-08 6 views
0

私はC#アプリケーションを作成して、多くの.bakファイルをresotreディレクトリに保存しています。今は問題なく動作しますが、私は解決できないような問題が1つあり、あなたの助けが必要です。 ExecuteNonQueryは1つの.bakファイルを復元するためにWhileを受け取り、ExecuteNonQueryが完了するたびにメッセージでテキストボックスを更新します。メソッドの実行後にTextBoxを更新するWinforms

私はExecuteNonQueryAsyncを呼び出そうとしましたが、私はこのメッセージを得る:

接続は充電MultipleActiveResultSetsに

をとらない私の質問は:どのように私は、テキストボックスを更新することができ、それぞれの時間は、ExecuteNonQueryを仕上げ?ここで

は私のコードで、アドバイスしてください:のexecuteQueryため

foreach (FileInfo file in Files) 
     { 
      string DbNamequery = "RESTORE FILELISTONLY FROM DISK = N'" + FolderBrowser.SelectedPath + @"\" + file.Name + "'" ; 

      sqlform.ConSQL.PrepareQuery(DbNamequery); 

      try 
      { 
       string DbName = sqlform.ConSQL.GetDataBaseName(); 
       string RestoreQuery = "RESTORE DATABASE [" + file.Name + "] FILE = N'" + DbName + "' FROM DISK = N'" + FolderBrowser.SelectedPath + @"\" + file.Name; 
        RestoreQuery += "' WITH FILE = 1,MOVE N'" + DbName + @"' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\" + file.Name + ".mdf'"; 
        RestoreQuery += ",MOVE N'" + DbName + @"_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\" + file.Name + "_0.ldf',"; 
        RestoreQuery += "NOUNLOAD, STATS = 10"; 

       sqlform.ConSQL.PrepareQuery(RestoreQuery); 

       sqlform.ConSQL.ExecuteQuery(); 

       ReportTextBox.Text += "Data Base : " + DbName + " Has been Restored With this Name :" + file.Name + " Successfully \r\n"; 

      } 
      catch (Exception ex) 
      { 
       ReportTextBox.Text += "Couldn't Resotre File " + file.Name + " Because of The following : \r\n" + ex.Message; 
      } 
     } 

定義():

public async void ExecuteQuery() 
    { 
     int x = await cmd.ExecuteNonQueryAsync(); 
    } 

を私は同期クエリを実行すると、それが正常に動作しますが、ReportTextboxがするまで更新されません。ループは終了しました。また、このコードは、事前に

おかげであなたはasync voidメソッドを持つべきではないすべての

答えて

0

まずではなく、あなたの呼び出し元のコードでTask

public async Task<int> ExecuteQuery() 
    { 
     int x = await cmd.ExecuteNonQueryAsync(); 
     return x; 
    } 

を返すクリックボタンイベントに包まれている

awaitメソッド呼び出しと更新テキストボックス。操作が成功した場合にのみ、テキストボックスのテキストを更新したい場合は

+0

オハイオ州私はタスクを返すことを考えなかったので、すべてのAsyncronos Methodeはタスクタイプのものを返しますか?しかし、今はそれが私のテキストボックスを更新していますが、クエリが結果をよく実行しても> 0テストはいつも失敗しますか?私はtry try catchがRESTORE操作が成功するかどうかを検出するのに十分だろうと思います。とにかく本当に助けてくれたあなたの洞察に感謝の男 –

関連する問題