我創建了一個銷售表,其插入功能無法正常工作。它顯示如下錯誤消息「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'讀者打開? –