将参数传递给存储过程时出错

时间:2014-09-16 12:48:19

标签: c# sql asp.net stored-procedures odbc

我创建了一个用于在表中插入值的存储过程。这是存储过程:

CREATE PROCEDURE [dbo].[insertproc]
    @CollectionPersonName varchar(50), 
    @Address varchar(1500),
    @ContactNo varchar(50),
    @CreatedBy int,
    @CreatedOn datetime
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    insert into CollectionPersonDetails(CollectionPersonName, Address, ContactNo, CreatedBy, CreatedOn)   
    values(@CollectionPersonName, @Address, @ContactNo, @CreatedBy, @CreatedOn);
END

下面是我为在存储过程中传递参数和执行查询而编写的函数:

public static int SaveDataProcedure(tblCollectionPersonObj oSaveObj, int iUserId)
{
        string query = "insertproc";

        OdbcConnection conn = new OdbcConnection(Connect.ConnectionString());

        OdbcCommand cmd = new OdbcCommand("insertproc",conn);
        cmd.CommandText = query;
        cmd.CommandType = CommandType.StoredProcedure;            

        cmd.Parameters.AddWithValue("@CollectionPersonName",   oSaveObj.SCollectionPersonName);            
        cmd.Parameters.AddWithValue("@Address", oSaveObj.SAddress);           
        cmd.Parameters.AddWithValue("@ContactNo", oSaveObj.SPhoneNo);            
        cmd.Parameters.AddWithValue("@CreatedBy", iUserId);          
        cmd.Parameters.AddWithValue("@CreatedOn", CommonData.GetDateForDatabase(DateTime.Now));            

        cmd.Connection.Open();

        int i= cmd.ExecuteNonQuery();

        cmd.Connection.Close();
        return i;
    }

我收到一条错误,指出存储过程需要未提供的参数@collectionPersonName。我也尝试过使用parameters.add函数,但显示的错误相同。

当我通过代码调试时,我可以看到值,但是当执行到ExecuteNonQuery()时,我得到了错误。这个错误可能非常愚蠢但是我没有&#39能够找到它。

请帮助。

1 个答案:

答案 0 :(得分:0)

如果value为null,

AddWithValue方法将不会添加参数。

检查oSaveObj.SCollectionPersonName是否为空,在这种情况下使用DBNull.Value

cmd.Parameters.AddWithValue("@CollectionPersonName",   oSaveObj.SCollectionPersonNamу ?? DBNull.Value);