在单个连接中使用多个事务

时间:2011-12-24 04:48:13

标签: c# .net ado.net sql-server-ce

基本上它是一种修补机制

以下是我正在做的事情:

  1. 打开SQL连接。
  2. 开始交易。
  3. 更新数据库中的软件版本记录。
  4. 使用相同的连接在同一个数据库上执行更多查询。
  5. 下载15到20 MB的文件。
  6. 使用相同的连接执行选择查询。
  7. 提交交易。
  8. 关闭交易。
  9. 此序列导致SQL Connection超时问题,因为下载文件需要一些时间。 问题是我只能在下载文件后才提交事务,而不是在此之前。

    将代码写入C#。使用的数据库是SQLCE 以下是代码的一部分:

    SqlCeConnection conn = new SqlCeConnection("ConnectionString");
    
    conn.Open();
    SqlCeTransaction ts = conn.BeginTransaction();
    
    //A method call executes all the methods that with parameters
    (string sqlQuery, ref SqlCeConnection conn, SqlCeTransaction ts)
    {
    SqlCeCommand cmd = new SqlCeCommand();
    cmd.Connection = conn;
    cmd.Transaction = ts;
    cmd.CommandText = sqlQuery;
    cmd.ExecuteNonQuery();
    }
    
    //A method call downloads the file of 15 to 20 MB
    
    //A method executes a select query that returns the version of the software by using same SQL connection.
    
    //The above query gives the error of SQl connection timeout 
    ts.Commit();
    conn.Close();
    

    任何人都可以帮我解决问题

2 个答案:

答案 0 :(得分:0)

手动设置命令超时。

cmd.CommandTimeout = 180;

此示例将超时设置为180秒(3分钟)

答案 1 :(得分:0)

这就是我所做的。

我将相同的连接和事务对象传递给正在下载文件的方法。 在该方法中,我在循环中执行了一个简单的选择查询,其中文件被下载。这有助于保持连接和事务处于活动状态。 在这里,即使您的互联网连接速度很慢,也不会影响每个循环中的SQl查询被触发并保持连接活动。