C# asp.net DataReader从不关闭

C# asp.net DataReader从不关闭,c#,asp.net,datareader,C#,Asp.net,Datareader,如果manage_score返回true,则调用函数Update。 在Update(System.Data.SqlClient.SqlDataReader oReader3=cmd2.ExecuteReader())中的这一行,我得到了这个错误(已经有一个打开的DataReader与此命令关联,必须先关闭)。我删除了一些行,以减少代码的读取长度。 管理分数:如果尚未插入新条目,则插入新条目。 Update:如果条目已经存在,则调用,并且它在更新之前进行一些计算 多谢各位 public stati

如果manage_score返回true,则调用函数Update。 在Update(System.Data.SqlClient.SqlDataReader oReader3=cmd2.ExecuteReader())中的这一行,我得到了这个错误(已经有一个打开的DataReader与此命令关联,必须先关闭)。我删除了一些行,以减少代码的读取长度。 管理分数:如果尚未插入新条目,则插入新条目。 Update:如果条目已经存在,则调用,并且它在更新之前进行一些计算

多谢各位

public static bool manage_score(String City, String Street, String No, int Clean, int Fun, int Study, bool recommend)
{
    System.Data.SqlClient.SqlConnection conn=null;
    System.Data.SqlClient.SqlCommand cmd = null; ;
    System.Data.SqlClient.SqlDataReader rdr=null;
    bool needUpdate=false;

    try
    {
        using( conn = new System.Data.SqlClient.SqlConnection(dbConn))
        { 

             using(cmd = new System.Data.SqlClient.SqlCommand(
             "Insert Into c_Show (Street,City,No,Count,Clean,Fun,Study,CleanScore,FunScore,StudyScore,Like_,Dislike) " +
             "VALUES (@Street,@City,@No,'1',@Clean,@Fun,@Study,@Clean,@Fun,@Study,@Like,@DisLike)", conn))
             { 
                cmd.Parameters.Add("@No", System.Data.SqlDbType.Int).Value = No;
                cmd.Parameters.Add("@City", System.Data.SqlDbType.Char).Value = City;

                cmd.Connection.Open();
                using (rdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)) { }
            }
        }
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
        if (ex.Number == 2627)// duplicate key
        {
            needUpdate=true;
        }
    }
    catch (System.Exception ex) { }

    return needUpdate;
}

static public void update(String City, String Street, String No, int Clean, int Fun, int Study, bool recommend)
{
    using (System.Data.SqlClient.SqlConnection conn2 = new System.Data.SqlClient.SqlConnection(dbConn))
    {
        String resCount = null;
        String resClean = null;
        String resFun = null;
        String resStudy = null;
        String resLike = null;
        String resDislike = null;

        using (System.Data.SqlClient.SqlCommand cmd2 = new System.Data.SqlClient.SqlCommand(
        "SELECT Street,City,No,Count,CleanScore,FunScore,StudyScore,Like_,Dislike FROM c_Show " +
        "Where City=@City and Street=@Street and No=@No ", conn2))
        {
            cmd2.Parameters.Add("@No", System.Data.SqlDbType.Int).Value = No;
            cmd2.Parameters.Add("@City", System.Data.SqlDbType.Char).Value = City;
            cmd2.Parameters.Add("@Street", System.Data.SqlDbType.NVarChar).Value = Street;
            cmd2.Connection.Open();
            cmd2.ExecuteReader();
            using (System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader())
            {}
        }
    }
}

根据您的代码,您错误地调用了
cmd2.ExecuteReader()
两次

        cmd2.ExecuteReader(); // once.  You probably want to remove this one?
        using (System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader()) // twice
        {

我认为第一个电话是个错误。删除它,你应该会没事的。

谢谢你,阿芙,我一分钟前才看到这个错误。在我的小房间里进行了一个漫长的热天编程。是的,高温会让我们看到东西,或者看不到东西:)别忘了将答案标记为已接受,以便将问题标记为已解决。