我收到错误:不允许从数据类型 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();
路径是一个字符串。对应的 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();
默认参数仅在它们不存在时使用,换句话说,不要将它们添加到参数列表中。
要将空值传递给可选参数,只需使用 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);