程序没有';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

程序没有';t将参数发送到存储过程

尝试

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;