我正在使用以下代码行从表中读取记录
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服务器内存不足。
答案 0 :(得分:-1)
您在LoadAllISomething
和循环中使用相同的连接吗?
可能是您应该首先关闭SQL阅读器以进行更新。或者创建另一个将用于更新的连接。同时检查数据库和/或连接设置是否在读取时没有阻塞整个表。