打开 DataReader,必须关闭:在本地工作,部署失败.网页接口



以下代码在本地调试时工作正常。每当我将其推送到我的开发服务器时,它都不再起作用了。我已经找到了导致问题的代码,我能够通过添加下面有注释的行来修复,但我不确定为什么我必须添加该行。在Web.Config中,我有MultipleActiveResultSets=true;应该导致这种情况不会发生。所以,我不确定为什么我必须添加这一行。

public bool PersistStuff(string Account, List<Acknowledgement> acks)
{
    string sql = "my.sp.AccountProcedure";
    bool retVal = true;
    using (SqlConnection conn = new SqlConnection(_accountConnection))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Account", System.Data.SqlDbType.VarChar, 50)).Value = Account;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    int id = int.Parse(reader[0].ToString());
                    //*************************
                    // This is the line I added
                    reader.Close();
                    //*************************
                    sql = "my.sp.AccountAcknowledgementProcedure";
                    using (SqlCommand cmd2 = new SqlCommand(sql, conn))
                    {
                        cmd2.CommandType = System.Data.CommandType.StoredProcedure;
                        foreach (Acknowledgement item in acks)
                        {
                            cmd2.Parameters.Clear();
                            cmd2.Parameters.Add(new SqlParameter("@severity", System.Data.SqlDbType.VarChar, 25)).Value = item.Severity.ToString();
                            if (!string.IsNullOrEmpty(item.ErrorData))
                                cmd2.Parameters.Add(new SqlParameter("@errorData", System.Data.SqlDbType.VarChar, 500)).Value = item.ErrorData;
                            else
                                cmd2.Parameters.Add(new SqlParameter("@errorData", System.Data.SqlDbType.VarChar, 500)).Value = DBNull.Value;
                            cmd2.ExecuteNonQuery();
                        }
                    }
                }
                else
                {
                    retVal = false;
                }
            }
        }
    }
    return retVal;
}

当我写这个问题时,我忘记了我的Web.Debug.Config和Web.Release.Config中有xdt:Transform。查看我的调试和发布配置后,所使用的连接字符串中都没有MultipleActiveResultSets=true;。我更改了每个配置中的连接字符串以拥有它并重新部署,一切正常。

相关内容

最新更新