2

複数の挿入を伴うトランザクションがあります。1つを除いて、すべてのインサートが正常に機能します。パラメータ、スペル、すべてを確認しましたが、理解できていないようです。エラーが表示されます:

Timeout expired. The timeout period elapsed prior to completion of the operation 
or the server is not responding.

私のトランザクションは次のようになります。

SqlConnection db = new SqlConnection(connString);
DataSet dataSet = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
using (db)
{
    db.Open();
    SqlTransaction trans = db.BeginTransaction();
    try
    {
        //insert into COMMSignalDefinition !!Problem HERE
        da.InsertCommand = 
            new SqlCommand("INSERT INTO COMMSignalDefinition(Name) " 
                           + "VALUES (@name)", db, trans);

        da.InsertCommand.Parameters.Add("@name", SqlDbType.NVarChar);
        foreach (DataRow row in ds.Tables["COMMTerminalSignal"].Select())
        {
            da.InsertCommand.Parameters[0].Value = row.ItemArray[1];
            da.InsertCommand.ExecuteNonQuery();
        }

        // insert into COMMSignalExceptionDefinition -- names
        da.InsertCommand = 
            new SqlCommand("INSERT INTO COMMSignalExceptionDefinition(Name) " 
                           + "VALUES (@name)", db, trans);
        da.InsertCommand.Parameters.Add("@name", SqlDbType.NVarChar);
        foreach (DataRow row in ds.Tables["COMMSignalExceptionDef"].Select())
        {
            da.InsertCommand.Parameters[0].Value = row.ItemArray[1];
            da.InsertCommand.ExecuteNonQuery();
        }

        trans.Commit();
        MessageBox.Show("You have successfully imported your Settings. " 
                        + "You can now exit the program.", 
                         "Success",
                         MessageBoxButtons.OK, 
                         MessageBoxIcon.Information);
    }
    catch (Exception e)
    {
        trans.Rollback();
        MessageBox.Show(e.Message,
                        "Error", 
                        MessageBoxButtons.OK, 
                        MessageBoxIcon.Error);
    }
}

正常に動作する挿入がさらにあり(残りの挿入は削除しました)、最初に問題のある挿入を移動しました。私の質問は、何が間違っている可能性がありますか? 「問題のある」クエリがサーバーに送信されるかどうかも確認しましたが、SQL Server Profiler,そうです! で実行するとSQL Server Management studio、それも機能します。

Connection Timeout30に設定されています

手がかりを教えてください。SQL Server のバージョンは 2005 です。ありがとう!

4

4 に答える 4

3

この投稿を削除してください。私はとても恥ずかしいです...何時間も掘り下げた後、Management Studioでいくつかのテストを行ったことがわかりました。そこでは、トランザクションをまったくコミットせずにいくつかのトランザクションをテストしました。それでコミットを待っていたので、私は作成を続けた、または挿入を作成しようとしました... ! 恥ずかしい!これにつきましては申し訳ございません。

于 2013-01-18T12:34:52.830 に答える
1

これがかなり長時間実行される操作である場合は、コマンドタイムアウトを変更してみてください。

于 2013-01-18T09:48:35.093 に答える
1
  1. 接続文字列を確認してください。たぶん、connString 変数に間違いがあるかもしれません
  2. SqlDataAdapter コマンドのタイムアウトを確認してください。それらが例外の原因である可能性があります ( http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspxを参照)。通常、このような例外は、長時間実行されているタスクまたはコミットされていないトランザクション。
于 2013-01-18T09:52:17.440 に答える
0

接続タイムアウトは 1 に設定されています

SqlConnection.ConnectionTimeout財産

接続が開くまで待機する時間 (秒単位)。デフォルト値は 15 秒です。

したがって、タイムアウトを 1 秒に設定しました。それはあなたの質問に答えていますか?

備考: 接続文字列で ConnectTimeout または Connection Timeout キーワードを使用して、接続がタイムアウトするまでの時間を設定できます。値 0 は no limit を示し、接続の試行が無期限に待機するため、ConnectionString では避ける必要があります。

于 2013-01-18T09:36:05.907 に答える