我試圖插入一個記錄,如果請求prodName
不存在數據庫中。如果存在,我想更新quantity
屬性的值。我用下面它既不插入也不更新任何記錄。我得到以下異常:在asp.net和SQL SERVER 2008中插入/更新
ExecuteScalar requires an open and available Connection. The connection's current state is closed
這是代碼
public static void manageStock(CompanyStock stock)
{
///// Check if record exists/////////
cmd = new SqlCommand("select count(*) from tblStock where [email protected]", con);
cmd.Parameters.AddWithValue("@prodName", stock.prodName);
con.Open();
Int32 count = (Int32)cmd.ExecuteScalar(); //returns null if doesnt exist
con.Close();
if (count > 0)
{
cmd = new SqlCommand("update tblStock set quantity = @quantity where [email protected]", con);
cmd.Parameters.AddWithValue("@prodName", stock.prodName);
cmd.Parameters.AddWithValue("@quantity", stock.quantity);
}
else
{
cmd = new SqlCommand("insert into tblStock(prodName,quantity) values (@prodName, @quantity)", con);
cmd.Parameters.AddWithValue("@prodName",stock.prodName);
cmd.Parameters.AddWithValue("@quantity",stock.quantity);
}
try
{
con.Open();
cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
}
編輯 我編輯我的代碼。現在它工作正常。我必須在執行ExecuteScalar
之前打開我的連接,但我想知道編寫這個開始和結束內容的標準方式。它看起來很隨意。我該如何改進?
我相信你需要打開你的執行的第一個命令對象之前的連接:首先寫一個存儲過程。我不確定你的代碼是如何執行的。如果這確實是代碼,它將始終執行INSERT到tblStock命令。 – abhi
你的代碼有什麼問題是你不處理你的異常,所以你看不到可能告訴你問題真的是什麼的錯誤信息。 – Pleun
@Pleun雖然沒有「catch」,他們不會只是泡了嗎?雖然聽起來好像有可能在某處進一步吞嚥。 –