读取和更新同一个表中的记录时超时过期异常

时间:2016-07-13 10:08:50

标签: c# sql ado.net

我正在使用以下代码行从表中读取记录

        public static IEnumerable<ISomething> LoadAllISomething( )
        {
                        (var r = cmd.ExecuteReader())
                        {
                            while (r.Read())
                            {
                                yield return (ISomething)DeserializeSomething(r.GetString(0), r.GetString(1), r.GetInt32(2));
                            }
                        }}

我将此功能称为

 var allThings = LoadAllISomething();

所以,这个函数正在返回IEnumerable,我正在迭代使用每个循环

    foreach (var e in allThings)
    { 
       //Do something 
       if(someCondition)
        //call function which executes below commandtext
        //Update TableName Set Coumn1='{2}' where column2='{0}'  and  column3={1}", 41, "F", "S");
        //I am getting exception at this line
       else
       //call function which executes below commandtext
        //Update TableName Set Coumn1='{2}' where column2='{0}'  and  column3={1}", 41, "F", "F");
        //I am getting exception at this line
    }

在这种情况下,我们使用表中的延迟加载进行迭代并更新同一个表中的行。 Timeout过期后我不例外。 我正在尝试更新当前循环中存在的同一行。 这是不允许的,如果没有,那么还有其他办法吗?

它与var allThings = LoadAllISomething().ToArray();完美配合,但是我必须使用Lazy加载实现,因为如果我一次加载所有行,表包含许多记录并且Db服务器内存不足。

1 个答案:

答案 0 :(得分:-1)

您在LoadAllISomething和循环中使用相同的连接吗? 可能是您应该首先关闭SQL阅读器以进行更新。或者创建另一个将用于更新的连接。同时检查数据库和/或连接设置是否在读取时没有阻塞整个表。