首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中插入记录时,连接必须有效且打开。

问在数据库中插入记录时,连接必须有效且打开。
EN

Stack Overflow用户
提问于 2016-09-05 05:11:03
回答 3查看 461关注 0票数 1

我试图将客户端详细信息插入数据库,但得到了此异常。

连接必须有效且打开。在MySql.Data.MySqlClient.MySqlCommand.Throw(Exception ex)在MySql.Data.MySqlClient.MySqlCommand.CheckState() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at book_online.saveClient_Click(对象发送者,EventArgs e)

代码语言:javascript
复制
MySqlConnection con = new MySqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
cmd.Parameters.AddWithValue("@clientName", companyName.Text);
cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
cmd.Parameters.AddWithValue("@city", companyCity.Text);
cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-05 05:16:39

您已经打开了连接并执行了命令,但是您忘记了将连接分配给命令,那么只有代码可以像您预期的那样正常工作。强烈建议您也使用。然后,代码将如下所示:

代码语言:javascript
复制
using (MySqlConnection con = new MySqlConnection())
{
    con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
    string queryText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
    using (MySqlCommand cmd = new MySqlCommand(queryText, con))
    {
        cmd.Parameters.AddWithValue("@clientName", companyName.Text);
        cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
        cmd.Parameters.AddWithValue("@city", companyCity.Text);
        cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
        cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
        con.Open();
        cmd.ExecuteNonQuery();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-05 05:55:44

命令缺少连接字符串.

代码语言:javascript
复制
MySqlConnection con = new MySqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
cmd.Parameters.AddWithValue("@clientName", companyName.Text);
cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
cmd.Parameters.AddWithValue("@city", companyCity.Text);
cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
票数 1
EN

Stack Overflow用户

发布于 2016-09-05 05:12:49

您没有为命令指定连接对象:

代码语言:javascript
复制
cmd.Connection = con;

另外,最好使用一个using块,当它退出连接时,它会自动关闭连接:

代码语言:javascript
复制
using(MySqlConnection con = new MySqlConnection())
{
   con.ConnectionString =
                       ConfigurationManager.ConnectionStrings("conio").ConnectionString();

   MySqlCommand cmd = new MySqlCommand();
   cmd.CommandText = @"INSERT INTO clientsDetails
              (clientName, companyAddress, city, contactPersonName, contactNumber1)
               Values
              (@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";

   cmd.Connection = con;
   cmd.Parameters.AddWithValue("@clientName", companyName.Text);
   cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
   cmd.Parameters.AddWithValue("@city", companyCity.Text);
   cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
   cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
   con.Open();
   cmd.ExecuteNonQuery();
}

为了获取信息,using关键字允许编译为封闭的块生成一个try...finally,并在生成的最终块中对using中的对象调用Dispose (在您的示例中是con)。因此,在所有最终得到保证的情况下,都保证关闭连接)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39324258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档