【发布时间】:2014-04-26 09:31:43
【问题描述】:
我编写了一个程序,该程序根据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
【问题讨论】:
-
您可以尝试将 proc 参数名称更改为 @test 并在代码中使用相同的名称并检查。也只需像这样传递值 SqlParameter("@test", 1);看看你是否仍然得到同样的错误。我在本地尝试了你的代码,它对我来说很好。
-
你可以试试 cmd.Parameters.AddWithValue("@ComplainantTypeID", 1);删除 SqlParameter 行
-
@Rishikesh 是的,先生,它起作用了,但是为什么呢?
-
当您这样编写时,.net 运行时似乎无法映射数据类型。我认为这段代码也可以工作 SqlParameter pComplainantTypeID = new SqlParameter("@ComplainantTypeID",SqlDbType.SmallInt,value);我已将此添加为答案,请接受
标签: c# asp.net sql sql-server stored-procedures