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

本文关键字:新记录 超时 过期 异常 更新 读取 | 更新日期: 2023-09-27 17:56:40

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

        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
    }

在这种情况下,我们使用从表延迟加载并更新同一表中的行进行迭代。我是例外,因为超时已过期。我正在尝试更新当前循环中存在的同一行。这是不允许的,如果没有,那么还有其他方法可以做到这一点吗?

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

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

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