在我的一个 .NET 应用程序中,我试图调用 sybase 数据库中的存储过程,根据我们的业务逻辑,我发送的一些值可能为空。
但是,如果我发送一个空值,我会得到一个“不支持的参数类型”异常。
有什么建议么?
在我的一个 .NET 应用程序中,我试图调用 sybase 数据库中的存储过程,根据我们的业务逻辑,我发送的一些值可能为空。
但是,如果我发送一个空值,我会得到一个“不支持的参数类型”异常。
有什么建议么?
根本不要将参数添加到命令中,就 .NET 而言,这被认为是 null。
在将空值传递给数据库时使用DBNull.Value
, 而不是。null
来自Sybase:“您可以在 create procedure 语句中为参数分配一个默认值。如果用户不提供该值,该值可以是任何常量,用作过程的参数。” .
以下脚本声明了一个带有默认值的 SP,然后通过以下参数执行它:2、NULL、DEFAULT,并且没有任何值。您可以看到不指定参数的行为与传递 DEFAULT 相同,并且可以与传递 NULL 不同。
这就是我指出的区别,因为当您不为 Command 对象声明参数时,您会得到以下行为类型:
CREATE PROCEDURE MySp(@p1 INT = 1)
AS BEGIN
SELECT @p1 AS [parameter_value];
END
GO
EXEC MySp 2; -- parameter value = 2
EXEC MySp NULL; -- parameter value = NULL
EXEC MySp DEFAULT; -- parameter value = 1
EXEC MySp; -- parameter value = 1
GO