요청한 경우 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
하지만이 열기 및 닫기 작업을 작성하는 표준 방법을 알고 싶습니다. 우연이 아닌 것처럼 보입니다. 어떻게 개선 할 수 있습니까?
을 사용할 수 있습니다 뒤에 코드에서 다음
: 먼저 저장 프로 시저를 작성합니다. 귀하의 코드가 어떻게 실행되는지 모르겠습니다. 이것이 실제로 코드라면, 항상 tblStock 명령으로 INSERT를 실행합니다. – abhi
코드의 문제점은 예외를 처리하지 않아서 실제로 문제가 무엇인지 알려주는 오류 메시지를 볼 수 없다는 것입니다. – Pleun
@Pleun 'catch'가 없어도 버블을 일으키지 않을까요? 어딘가에 삼키는 스택에 뭔가가있는 것처럼 들리지만. –