首页 > 解决方案 > SQL Connection(C#)-Executenonquery 需要一个打开且可用的连接。连接当前状态为关闭

问题描述

我在生产服务器中随机收到此错误。当我在我的视觉工作室中执行解决方案时,没有收到此错误。我在日志文件中捕获所有异常。我收到了这个错误。而且我在执行非查询之前打开了一个连接。我已经使用 SQL 连接语句在里面编写了 executenonquery。

try
{   
    try
    {
        Globale.OpenConnection();
        foreach (DataRow dr in dt.Rows)
        {
            if (string.IsNullOrEmpty(dr["SubsRateCode"].ToString()))
            {
                continue;
            }
            cmd = new SqlCommand("Sp_EstSubsRateDetail", conn, tn)
            {
                CommandType = CommandType.StoredProcedure
            };
            cmd.Parameters.AddWithValue("@EstSubsRateID", Globale.ConvertObjectToInteger(dr["EstSubsRateID"]));
            cmd.Parameters.AddWithValue("@EstimationID", oclsEstimationEntity.EstimationID);
            cmd.Parameters.AddWithValue("@EstCode", oclsEstimationEntity.EstCode);
            cmd.Parameters.AddWithValue("@ProductDetailID", oclsEstimationEntity.ProductDetailID);
            cmd.Parameters.AddWithValue("@EnqID", oclsEstimationEntity.EnqID);
            cmd.Parameters.AddWithValue("@EnqCode", oclsEstimationEntity.EnqCode);
            cmd.Parameters.AddWithValue("@Category", dr["Category"].ToString());
            cmd.Parameters.AddWithValue("@PrdGroup", dr["PrdGroup"].ToString());
            cmd.Parameters.AddWithValue("@PrdType", dr["PrdType"].ToString());
            cmd.Parameters.AddWithValue("@SubsRateCode", dr["SubsRateCode"].ToString());
            cmd.Parameters.AddWithValue("@AdhesiveType", dr["AdhesiveType"].ToString());
            cmd.Parameters.AddWithValue("@LinerType", dr["LinerType"].ToString());
            cmd.Parameters.AddWithValue("@SupCode", dr["SupCode"].ToString());
            cmd.Parameters.AddWithValue("@SubItemCode", dr["SubItemCode"].ToString());
            cmd.Parameters.AddWithValue("@MasterPrice", Globale.ConvertObjectToDecimal(dr["MasterPrice"]));
            cmd.Parameters.AddWithValue("@MstSelect", Globale.ConvertObjectToInteger(dr["MstSelect"]));
            cmd.Parameters.AddWithValue("@WaccPrice", Globale.ConvertObjectToDecimal(dr["WaccPrice"]));
            cmd.Parameters.AddWithValue("@WcSelect", Globale.ConvertObjectToInteger(dr["WcSelect"]));
            cmd.Parameters.AddWithValue("@ManualPrice", Globale.ConvertObjectToDecimal(dr["ManualPrice"]));
            cmd.Parameters.AddWithValue("@MnpSelect", Globale.ConvertObjectToInteger(dr["MnpSelect"]));
            cmd.Parameters.AddWithValue("@MetersRoll", Globale.ConvertObjectToDecimal(dr["MetersRoll"]));
            cmd.Parameters.AddWithValue("@Width", Globale.ConvertObjectToDecimal(dr["Width"]));
            cmd.Parameters.AddWithValue("@SubRemark", dr["SubRemark"].ToString());
            cmd.Parameters.AddWithValue("@SiteRefrence", oclsEstimationEntity.Site_Refrence);
            cmd.Parameters.AddWithValue("@Action", Mode.ToString());
            lock (Globale.conn)
            {
                var connectionString = Globale.GetConnectionString();
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    result = cmd.ExecuteNonQuery() > 0;
                }
            }
            result = true;
        }
    }
    catch (Exception exception)
    {
        var st = new StackTrace(exception, true);
        // Get the top stack frame
        var frame = st.GetFrame(0);
        // Get the line number from the stack frame
        var line = frame.GetFileLineNumber();
        ErrorLog("c:/inetpub/wwwroot/BC_EEA1/error/error.txt", "EstDAL "+ System.Reflection.MethodBase.GetCurrentMethod().Name, exception.Message, line, Globale.GetConnectionString(), oclsEstimationEntity.EstCode.ToString());
    }
}
finally
{
    if (cmd != null)
    {
        cmd = null;
    }
    Globale.CloseConnection();
}

标签: c#

解决方案


推荐阅读