SqlDataReader 和并发/释放问题



运行下面的代码会给我一个错误:

由于内存不足,升级策略中止了 .NET Framework 的执行。System.InvalidOperationException:已经有一个与此命令关联的打开的 DataReader,必须先关闭它。

我到处都有以下代码来运行我的 sql:

sql.Append(string.Format("SELECT TableId FROM ps_SavedTables WHERE guid = '{0}'", guid));
    using (IDataReader reader = SqlHelper.GetDataReader(sql.ToString())) {
        if (reader.Read()) {
            result = reader.IsDBNull(0) ? string.Empty : reader[0].ToString();
        }
        //CDW added to close SqlDataReader
        reader.Close();
    }

GetDataReader 的定义如下:

public static SqlDataReader GetDataReader(string sql, string connectionString) {
    lock (_lock) {
        SqlConnection connection = null;
        try {
            connection = GetConnection(connectionString);
            //connection.Open();
            using (SqlCommand cmd = new SqlCommand(sql, connection)) {
                WriteDebugInfo("GetDataReader", sql);
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
        }
        catch (Exception e) {
            if (connection != null)
                connection.Dispose();
            throw new DataException(sql, connectionString, e);
        }
    }
}

锁需要在读取器级别...多个线程正在打开读取器

相关内容

  • 没有找到相关文章

最新更新