0

在我的一个 .NET 应用程序中,我试图调用 sybase 数据库中的存储过程,根据我们的业务逻辑,我发送的一些值可能为空。

但是,如果我发送一个空值,我会得到一个“不支持的参数类型”异常。

有什么建议么?

4

2 回答 2

1

根本不要将参数添加到命令中,就 .NET 而言,这被认为是 null。

于 2012-05-24T15:17:22.203 回答
0

在将空值传递给数据库时使用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
于 2012-05-24T15:21:01.420 回答