程序没有';t将参数发送到存储过程
本文关键字:参数 存储过程 程序 | 更新日期: 2023-09-27 18:00:11
我写了一个程序,它根据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
尝试
cmd.Parameters.AddWithValue("@ComplainantTypeID", value);
或
SqlParameter pComplainantTypeID = new SqlParameter("@ComplainantTypeID",SqlDbType.SmallInt,value);
您必须显示异常以获得更好的帮助,但问题实际上在于数据类型。您通过了int
,但需要smallint
。查看SQL Server数据类型映射文章以选择适当的数据类型。
更新
不能将int转换为smallint
,必须传递类型为short
的参数,该参数映射到smallint
sql类型。
申报
public void Delete(short ComplainantTypeID)
而不是
public void Delete(int ComplainantTypeID)
并保持SP不变。
尝试这个
sqlCommand.Parameters.Add("@ComplainantTypeID", SqlDbType.Int).Value = ComplainantTypeID;