![](/img/trans.png)
[英]Connection must be valid and open to commit transaction for sqllite database while retrying to execute the failed query
[英]Connection must be valid and open while inserting records in database
我试图将客户端详细信息插入数据库,但获得此异常
连接必须有效且开放。 at MySql.Data.MySqlClient.MySqlCommand.Throw(Exception ex)at MySql.Data.MySqlClient.MySqlCommand.CheckState()at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader ()at book_online.saveClient_Click的MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()(Object sender,EventArgs e)
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();
那么你已经打开了连接并执行了命令,但是你忘了为命令分配连接 ,那么只有代码可以正常工作。 强烈建议您也使用。 然后代码将如下所示:
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();
}
}
命令缺少连接字符串。
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();
您没有为命令指定连接对象:
cmd.Connection = con;
此外,最好使用一个using
块,当它退出该块时会自动关闭你的连接:
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
的封闭块,并调用Dispose
内部的物体上using
( con
在你的情况下)产生finally块内。 因此,保证在最终得到保证的所有情况下都能关闭您的连接)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.