oledb存储过程c#过程或函数需要未提供的参数

时间:2013-12-19 19:39:56

标签: oledb

我收到错误:不允许从数据类型nvarchar到varbinary的隐式转换。使用CONVERT函数运行此查询。 我的c#代码片段是:

 OleDbCommand spCmd = new OleDbCommand
                    ("[SomeServer].[dbo].GetAllProperties", conn)
                    {
                        CommandType = CommandType.StoredProcedure
                    };
                spCmd.Parameters.AddWithValue("@P1", path);
                spCmd.Parameters.AddWithValue("@P5", 4);
                int rowsAffected = spCmd.ExecuteNonQuery();

path是一个字符串。 对应的sql sp是:

ALTER PROCEDURE [dbo].[GetAllProperties]
@P1 nvarchar (425),
@P2 varchar(32) = NULL,
@P3 as varbinary(85) = NULL, 
@P4 as nvarchar(260) = NULL,
@P5 int
AS
BEGIN

....  请让我知道如何从c#调用此sp。 我尝试按顺序指定所有参数,但后来我得到错误:不允许从数据类型nvarchar到varbinary的隐式转换。使用CONVERT函数运行此查询

                spCmd.Parameters.AddWithValue("@P1", path);
                spCmd.Parameters.AddWithValue("@P2", DBNull.Value);
                spCmd.Parameters.AddWithValue("@P3", DBNull.Value);
                spCmd.Parameters.AddWithValue("@P4", DBNull.Value);
                spCmd.Parameters.AddWithValue("@P5", 4);
                int rowsAffected = spCmd.ExecuteNonQuery();

2 个答案:

答案 0 :(得分:1)

默认参数仅在不存在时使用,换句话说,不要将它们添加到参数列表中。

答案 1 :(得分:0)

将null值传递给可选参数只需使用null而不是DBType.Null。它有效:

        spCmd.Parameters.AddWithValue("@P1", path);
        spCmd.Parameters.AddWithValue("@P2", null);
        spCmd.Parameters.AddWithValue("@P3", null);
        spCmd.Parameters.AddWithValue("@P4", null);
        spCmd.Parameters.AddWithValue("@P5", 24);