连接必须是有效的,并且可以保存到MySql
本文关键字:保存 MySql 有效 连接 | 更新日期: 2023-09-27 18:13:15
我的同学说我有很多连接,但我试着删除和添加一些连接,但没有工作。我总是得到"连接必须是有效的和打开的"或"连接已经打开"answers"命令执行时遇到致命错误",我希望你们能帮助我。
这是我的保存部分,我把它放在transact_button
上,所以在收银员计算项目后,信息必须在mysql
数据库上,这样我就可以创建一个水晶报告。
try
{
string id = products_lv.SelectedItems[0].Text;
string name = products_lv.SelectedItems[0].SubItems[1].Text;
string price = products_lv.SelectedItems[0].SubItems[2].Text;
string qty = products_lv.SelectedItems[0].SubItems[4].Text;
sql_connect.Close();
sql_connect.Open();
sql_command = new MySqlCommand("insert into transaction_cashier(orderid,productid,productname,price,quantity,total,vat,subitems,payment,change) values (@orderid,@produtid,@productname,@price,@quantity,@total,@vat,@subitems,@payment,@change)");
sql_command.ExecuteReader();
sql_connect.Close();
sql_connect.Open();
sql_command.Connection = sql_connect;
sql_command.Parameters.AddWithValue("@orderid", id_num.Text);
sql_command.Parameters.AddWithValue("@productid", id.ToString());
sql_command.Parameters.AddWithValue("@productname", name.ToString());
sql_command.Parameters.AddWithValue("@price", price.ToString());
sql_command.Parameters.AddWithValue("@quantity", qty.ToString());
sql_command.Parameters.AddWithValue("@vat", vat_txt.Text);
sql_command.Parameters.AddWithValue("@subitems", subitems_txt.Text);
sql_command.Parameters.AddWithValue("@payment", payment_txt.Text);
sql_command.Parameters.AddWithValue("@change", change_txt.Text);
sql_connect.Open();
sql_command.ExecuteNonQuery();
sql_connect.Close();
MessageBox.Show("Saved");
}
catch (Exception ex)
{
MessageBox.Show("Transaction cashier error: " + ex.Message);
}
}
希望你们能帮助我,非常感谢。
您有一个打开的连接,但您从未将其与您的命令关联。该命令必须具有要执行的连接。创建命令时,必须将连接传递给构造函数,否则必须设置Connection
属性。
你的代码是荒谬的。以下是事件的顺序:
- 创建连接
- 创建命令并将其与连接关联。
- 添加命令参数
- 打开连接
- 执行命令
- 关闭连接。
您应该使用using
语句来创建连接,然后当它被处置时,它将在块的末尾自动关闭,例如
using (var connection = new MySqlConnection("connection string here"))
using (var command = new MySqlCommand("SQL code here", connection))
{
command.Parameters.AddWithValue("@ParamName", paramValue);
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch
{
// ...
}
}