从同一表中读取和更新记录时超时过期异常
本文关键字:新记录 超时 过期 异常 更新 读取 | 更新日期: 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读取器以进行更新。或者创建另一个将用于更新的连接。还要检查您的数据库和/或连接设置在读取时是否未阻塞整个表。