2

我有一个包含多个插入的事务。除一个外,所有插件都可以正常工作。我验证了参数,拼写,所有这些,似乎我没有弄清楚。它给了我错误:

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 Timeout设置为 30

你能给我一些线索吗?SQL Server 版本是 2005 !谢谢你!

4

4 回答 4

3

请删除此帖。我真为自己感到羞耻……经过数小时的挖掘,结果我在 Management Studio 中进行了一些测试,在那里我测试了一些交易而根本没有提交它们。所以它在等待提交,我一直在做,或者试图做插入......!真丢人!为此事道歉。

于 2013-01-18T12:34:52.830 回答
1

如果这是一个运行时间很长的操作,您可以尝试更改Command Timeout

于 2013-01-18T09:48:35.093 回答
1
  1. 检查您的连接字符串。也许您的 connString var 中有一些错误
  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 表示没有限制,应避免在 ConnectionString 中使用,因为连接尝试会无限期地等待。

于 2013-01-18T09:36:05.907 回答