c# - 已经有一个与此命令关联的打开的 DataReader,必须先将其关闭

标签 c# datareader

这是我的代码。

/// <summary>
/// Method calls stored procedure and fills DataSet of contacts associated with Lead
/// </summary>
/// <param name="leadID">The ID associated with a Lead</param>
/// <returns>contacts list as DataSet</returns>
public static DataSet GetContactResultSetByLead(int leadID)
{
    SqlCommand Sqlmd = new SqlCommand("dbo.proc_contact");
    Sqlmd.CommandType = CommandType.StoredProcedure;
    Sqlmd.Parameters.Add("@LeadInfoID", SqlDbType.Int).Value = leadID;

    Sqlmd.Connection = m_ConStr;
    SqlDataAdapter da = new SqlDataAdapter(Sqlmd);

    DataSet data = new DataSet();
    try
    {
        da.Fill(data);
    }

    finally
    {
        m_ConStr.Close();
    }

    return data;
}

最佳答案

你的问题是你显然有一个m_ConStr的实例;如果同时调用该方法,则只有其中一个可以使用连接,而另一个将失败,并出现您收到的异常。

改为使用此模式:

using (SqlConnection conn  = new SqlConnection())
{
    conn.Open();
    Sqlmd.Connection = conn;
    SqlDataAdapter da = new SqlDataAdapter(Sqlmd);
   //...etc
}

换句话说,不要将连接定义为类的全局变量。

关于c# - 已经有一个与此命令关联的打开的 DataReader,必须先将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023452/

相关文章:

c# - Epplus : how to display double quaotes in string concatenation formula

VB.NET 没有日期时间?数据读取器

c# - 当返回行时,如何修复 reader.Read() 部分中的输入格式不正确?

c# - 在 Datareader 中处理 NULL

c# - 我可以在 C# 中使用无类型集合吗

c# - 如何为 Html.BuildUrlFromExpression 调用指定默认区域

c# - 在 Foreach 中创建和启动任务

c# - Mono.Math.BigInteger 由于其保护级别而无法访问

python - 使用数据读取器时出现 ImmediateDeprecationError

asp.net - 在 ASP.NET (VB) 上使用 DataReader 返回上一行