我从昨天起就遇到了这个问题,我尝试了很多解决方案,但没有任何效果
当我做con.close();
private void cashier_Load(object sender, EventArgs e)
{
int a;
con.Open();
string query = "Select Max (invno) From Invoicesdata";
cmd = new SqlCommand(query, con);
SqlDataReader reader;
reader = cmd.ExecuteReader();
if (reader.Read())
{
string val = reader[0].ToString();
if (val == "")
{
Invoicenm.Text = "1";
}
else
{
a = Convert.ToInt32(reader[0].ToString());
a = a + 1;
Invoicenm.Text = a.ToString();
}
}
con.Close(); //I did connection close but nope
receiptgrid.Rows.Clear();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
cmd = new SqlCommand("SELECT * FROM Products WHERE Item_Code = @BarCode", con);
cmd.Parameters.Add(new SqlParameter("@BarCode", Productstxt.Text));
con.Open(); //here I am facing the problem
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
foreach (DataGridViewRow row in receiptgrid.Rows)
这是我的连接字符串SqlConnection con =new SqlConnection("Data Source=strongspider.ddns.net;Initial Catalog=POS;Persist Security Info=True;User ID=sa;Password=****Password**"); // <== this is the (POS) Database.
答案 0 :(得分:2)
我建议您遵循“开放迟到,提前关闭”模式,而不是共享相同的连接并包裹在using
块中。这将确保关闭连接,并且无需您显式调用Close
并利用连接池。
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(query, con))
{
//do command stuff here
}
答案 1 :(得分:0)
用尽所有非逻辑序列,并使用SqlConnection.State
保持安全所以不要使用
con.Open();
使用: -
if (con.State == con.Closed)
{
con.Open();
}
答案 2 :(得分:0)
由于您使用的是全局连接变量,因此无法管理连接状态。
尝试在需要的地方移动连接对象的声明和用法。
并使用using{}
块来连接和SqlDataReader
个对象。
这将使您免于明确要求关闭连接
private void cashier_Load(object sender, EventArgs e)
{
int a;
using(var conn = new SqlConnection(YOURCINNECTIONSTRING))
{
con.Open();
string query = "Select Max (invno) From Invoicesdata";
var cmd = new SqlCommand(query, con);
using(SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
}
}
}
}