数据库超时

时间:2013-11-13 16:11:00

标签: c# sql database

我有一个程序可以访问数据库并执行具有数据库调用的不同方法。 我已经使用了一个conenction,但它在执行一个长任务时导致超时: 我基本上不得不浏览超过6000条记录并执行存储过程。因为我只使用了一个数据库连接,所以导致超时的事情。

然后我更改了代码,因此我打开并关闭了我使用“using”方法调用的每个方法的连接。

我应该如何处理将被调用的方法。我每次访问该方法时都会打开/关闭连接吗?

或者有不同的方法吗?

我这样做:

foreach(record in MyCollection)//6000
{
    using(connection = new SqlConnection(conString))
    {
        singledata = GetSingleData(record);
    }
}

这是一个GetSingleData()

private byte[] GetSingleData(MyObject Data)
{
      byte[] singleData = null;

      using(SqlCommans......)
      {
            try
            {
                 .......
                 //executing stored proc to get just a single row
                 reader = command.ExecuteReader();
                 while(reader.Read())
                 {
                     singleData = (byte[])reader["ColumnName"];
                 }                
            }
            catch(SqlException ex)
            {
                  if(!reader.isClosed)
                      reader.Close();
            }
      }
      return singleData;
}

它是否有效或者我可以设置某种计数器,对于每500条记录,我可以检查连接是否已关闭以及是否重新打开。

感谢的

2 个答案:

答案 0 :(得分:0)

尝试使用持久连接。如果您想尝试调整系统(对于MySQL),这里有一篇文章可能会有所帮助:    http://www.mysqlperformanceblog.com/2011/04/19/mysql-connection-timeouts/

希望有所帮助。

答案 1 :(得分:0)

没有唯一好方法这样的事情。这完全取决于。如果敏捷性是必须的,并且您需要创建临时解决方案,那么在每个方法调用中打开和关闭连接在理论上可能不太好,但实际上可以接受。

我恳请您阅读这些术语和概念:

  1. Connection pooling
  2. Bulk operations (bulk update, bulk insert)
  3. 他们可能会帮助您获得更高的表现。