[英]Program doesn't send parameters to stored procedure
我寫了一個程序,該程序根據ID
選擇並應從gridview中刪除一行,但是它引發了一個異常,即未向存儲過程提供@ComplainantTypeID
但是我在調試中進行了檢查,它發送並添加了值,但仍然引發異常。
碼:
protected void btnDeletePopUp_Click(object sender, EventArgs e)
{
try
{
int ComplainantTypeID = Convert.ToInt32(txtSelectedID.Text.Trim());
ManageComplainantType mngComplainantType = new ManageComplainantType();
mngComplainantType.Delete(ComplainantTypeID);
Clear(txtName, txtSelectedID);
HiddenFieldSetMessage.Value = "Delete";
HiddenFieldShowMessage.Value = "True";
}
catch (Exception)
{
HiddenFieldSetMessage.Value = "NotDeleted";
HiddenFieldShowMessage.Value = "True";
}
}
BLL中的刪除功能:
public void Delete(int ComplainantTypeID)
{
SqlCommand cmd = new SqlCommand("DeleteComplainantTypes_SP", DataBaseConnection.OpenConnection());
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pComplainantTypeID = new SqlParameter("@ComplainantTypeID", ComplainantTypeID);
cmd.Parameters.Add(pComplainantTypeID);
cmd.ExecuteNonQuery();
DataBaseConnection.CloseConnection();
}
存儲過程:
PROCEDURE [dbo].[DeleteComplainantTypes_SP]
@ComplainantTypeID smallint
AS
BEGIN
BEGIN TRY
DELETE FROM ComplainantTypes WHERE ComplainantTypeID = @ComplainantTypeID
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage
END CATCH
END
您必須顯示異常以獲得更好的幫助,但是問題實際上出在數據類型上。 您通過int
但期望的是smallint
。 查看“ SQL Server數據類型映射”文章以選擇適當的數據類型。
更新
您不能將int轉換為smallint
,必須傳遞short
類型的參數,該參數映射到smallint
sql類型。
宣布
public void Delete(short ComplainantTypeID)
代替
public void Delete(int ComplainantTypeID)
並保持SP不變。
嘗試
cmd.Parameters.AddWithValue("@ComplainantTypeID", value);
要么
SqlParameter pComplainantTypeID = new SqlParameter("@ComplainantTypeID",SqlDbType.SmallInt,value);
嘗試這個
sqlCommand.Parameters.Add("@ComplainantTypeID", SqlDbType.Int).Value = ComplainantTypeID;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.