关闭读取器时调用Read无效;错误(仅适用于冗长的操作)

本文关键字:适用于 操作 错误 读取 调用 无效 Read | 更新日期: 2023-09-27 18:03:04

我们有一个操作,其中从csv文件中读取超过100,000条记录并插入到数据库中。当我使用一个有10条记录的文件时,操作在不到一分钟的时间内成功完成。

当我使用100,000条记录时,我得到以下错误"当阅读器关闭时无效尝试调用Read"。10分钟后。我可以配置任何超时来避免此错误吗?

注意:CommandTimeout已经被设置为零。

DbCommand cmd = db.GetStoredProcCommand("aspInsertZipCode");
cmd.CommandTimeout = 0;
dataStringToProcess.Remove(dataStringToProcess.Length - 1, 1);
db.AddInParameter(cmd, "@DataRows", DbType.String, dataStringToProcess.ToString());
db.AddInParameter(cmd, "currDate", DbType.DateTime, DateTime.Now);
db.AddInParameter(cmd, "userID", DbType.Int32, UserID);
db.AddOutParameter(cmd, "CountOfUnchangedZipCode", DbType.String, 1000);
DbDataReader rdr = null;
try
{
    rdr = (DbDataReader)db.ExecuteReader(cmd);
    if (rdr.Read())
    {
        if (!String.IsNullOrEmpty(Utility.GetString(rdr, "NewZipCode")))
            strNewZipCode = strNewZipCode + "," + Utility.GetString(rdr, "NewZipCode");
    }
    rdr.NextResult();
    if (rdr.Read())
    {
        strRetiredZipCode = strRetiredZipCode + "," + Utility.GetString(rdr, "RetiredZipCode");
    }
    int TempUnchageZipCount = Convert.ToInt32(db.GetParameterValue(cmd, "CountOfUnchangedZipCode"));
    CountOfUnchangedZipCode = CountOfUnchangedZipCode + TempUnchageZipCount;
    dataStringToProcess = new StringBuilder();
    cntRec = 0;
}
catch
{
    if (rdr != null && (!rdr.IsClosed))
        rdr.Close();
    throw;
}
finally
{
    if (rdr != null && (!rdr.IsClosed))
        rdr.Close();
}
cmd.Dispose();

关闭读取器时调用Read无效;错误(仅适用于冗长的操作)

可能是数据库超时…你查过了?

你到底想做什么?如果您确实需要读取这么多行,可以考虑将其减少为更小的块—例如,一次只读取1000行

实际上是MSDTC &事务问题。我更新了组件服务中的MSDTC超时。我还更新了系统中的超时值。机器事务。应用服务器的配置。