我创建了一个销售表,其插入功能无法正常工作。它显示如下错误消息“ExecuteNonQuery需要一个开放的可用连接,连接的当前状态为关闭”如果我删除了第14行的Sql关闭语句,则显示此错误消息msg “已经有一个打开的DataReader关联这个命令必须先关闭。“我的代码如下工作。我从我的产品表中检查了可用库存。如果数量订单大于产品表中的数量,则显示错误消息。否则,请继续将订单信息插入到销售表中。任何帮助表示赞赏。插入Sql功能不起作用
private void btnOrder_Click(object sender, EventArgs e) { int iQuantityDB; int iCustomerID = Convert.ToInt32(txtCustomerID.Text); int iProductID = Convert.ToInt32(txtProductID.Text); decimal dPrice = Convert.ToDecimal(txtPrice.Text); int iQuantity = Convert.ToInt32(txtQuantity.Text); decimal dSubtotal = Convert.ToDecimal(txtSubTotal.Text); decimal dGST = Convert.ToDecimal(txtGST.Text); decimal dTotal = Convert.ToDecimal(txtTotal.Text);
string strConnectionString = @"Data Source = KK\SQLEXPRESS; Integrated Security = SSPI; Initial Catalog = JeanDB; MultipleActiveResultSets=True;";
using (var sqlconn = new SqlConnection(strConnectionString))
{
sqlconn.Open();
string querySelectQuantity = @"Select Quantity from dbo.JeanProduct WHERE ProductID = @iProductID";
using (var cmdOrder = new SqlCommand(querySelectQuantity, sqlconn))
{
using (var sdRead = cmdOrder.ExecuteReader())
{
sdRead.Read();
iQuantityDB = Convert.ToInt32(sdRead["Quantity"]);
}
}
if (iQuantityDB > iQuantity)
{
string InsertQuery = @"INSERT INTO Sale(CustomerID, ProductID, Price, Quantity, Subtotal, GST, Total)VALUES(@iCustomerID, @iProductID, @dPrice, @iQuantity, @dSubtotal, @dGST, @Total)";
using (var InsertCMD = new SqlCommand(InsertQuery, sqlconn))
{
InsertCMD.Connection = sqlconn;
InsertCMD.Parameters.AddWithValue("@iCustomerID", iCustomerID);
InsertCMD.Parameters.AddWithValue("@iProdcutID", iProductID);
InsertCMD.Parameters.AddWithValue("@dPrice", dPrice);
InsertCMD.Parameters.AddWithValue("@iQuantity", iQuantity);
InsertCMD.Parameters.AddWithValue("@dSubtotal", dSubtotal);
InsertCMD.Parameters.AddWithValue("@dGST", dGST);
InsertCMD.Parameters.AddWithValue("@dTotal", dTotal);
InsertCMD.ExecuteNonQuery();
LoadDataonTable();
}
}
else
{
MessageBox.Show("no more stock");
}
sqlconn.Close();
}
}
为什么不使用'ExecuteReader',为什么不使用'ExecuteScalar',因为它看起来像你不想*让* sdRead'读者打开? –