ExecuteNonQuery需要一个打开的可用连接.连接的当前状态是关闭的

本文关键字:连接 状态 一个 ExecuteNonQuery | 更新日期: 2023-09-27 18:06:38

我的代码:

public bool Insertcustomer()
{
    try
    {
        SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con);
        cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode;
        cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername;
        cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno;
        cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno;
        cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid;
        cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website;
        cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation;
        cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status;

        cmd.CommandType = CommandType.StoredProcedure;
        return Convert.ToBoolean(cmd.ExecuteNonQuery());  //Error
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

App Config:

我是c# .net的新手,我找不到这个错误,谁来帮帮我

ExecuteNonQuery需要一个打开的可用连接.连接的当前状态是关闭的

您应该打开连接并关闭它。

string connectionString = "";
SqlConnection con = new SqlConnection(connectionString);
con.Open();
//do your coding 
con.Close();

错误信息说明了错误的地方。连接不是打开,而是关闭。

确保连接已打开。使用Open() -Method打开连接

顺便说一句,去掉try/catch块。捕获一个异常并再次抛出它有什么意义?

从代码中,您需要打开SqlCommand声明(dal.con)中指定的连接

你应该用

dal.con.Open()

在执行tenonquery之前,但记住在(dal.con.Close())之后关闭它。

我建议修改

return Convert.ToBoolean(cmd.ExecuteNonQuery());

dal.con.Open();
bool result = Convert.ToBoolean(cmd.ExecuteNonQuery());
dal.con.Close();
return result;

dal.con未设置或未打开等。

你能发布更多关于连接字符串的信息吗?

在Webconfig中试试:

<connectionStrings>
    <add name="connName" connectionString="//ConnectionString here"/>
</connectionStrings>

在班上:

public static SqlConnection GetConnection()
{
    string conString = ConfigurationManager.ConnectionStrings["connName"].ConnectionString;
    SqlConnection con = new SqlConnection(conString);
    return con;
}

而不是这个:

SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con);
        cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode;
        cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername;
        cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno;
        cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno;
        cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid;
        cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website;
        cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation;
        cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status;

        cmd.CommandType = CommandType.StoredProcedure;
        return Convert.ToBoolean(cmd.ExecuteNonQuery());  //Error
    }
    catch (Exception ex)
    {
        throw ex;
    }

这样做:

//Method + Insert string (Guessing you want to create a register page)
    try
    {
        SqlCommand cmd = new SqlCommand(sql, GetConnection());
    //You don't have to point out the data type if it's just going to be filled in like that.
        cmd.Parameters.AddWithValue("@customercode", customercode);
        cmd.Parameters.AddWithValue("@customername", customername);
        cmd.Parameters.AddWithValue("@address1", address1);
        cmd.Parameters.AddWithValue("@address2", address2);
        cmd.Parameters.AddWithValue("@phoneno", phoneno);
        cmd.Parameters.AddWithValue("@mobileno", mobileno);
        cmd.Parameters.AddWithValue("@mailid", mailid);
        cmd.Parameters.AddWithValue("@website", website);
        cmd.Parameters.AddWithValue("@occupation", occupation);
        cmd.Parameters.AddWithValue("@status", status);
        cmd.ExecuteNonQuery();
    }
        catch (System.Data.SqlClient.SqlException ex)
        {
            // You can catch it with an error, or Just leave it empty
            string msg = "Error";
            msg += ex.Message;
            throw new Exception(msg);
        }
        //Close the connection (Not Necessary)
        GetConnection().Close();
    }