1

我知道还有一些关于此错误的其他线程/问题,但如果可能的话,我想获得更多的见解。我们已经看到对于具有整数类型输出参数的特定代码段间歇性地发生此错误。

这就是我们定义参数的方式:

SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.Direction = ParameterDirection.Output;

您会注意到没有指定大小,也没有指定 DBType。似乎错误并不总是发生,但有时会抛出:

在 System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc, Int32 startCount, Boolean inSchema, SqlParameterCollection 参数) 处的 System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) Size 属性的大小无效。

我假设我需要添加 DBType 和 Size 设置,但可能是这种情况发生的根本原因是什么,并且仅在某些情况下发生?

注意,SQL中的参数定义为:

@ErrorCode              INT                 OUT ,
4

1 回答 1

3

如果类型是字符串,则需要大小,您的类型是 int。您需要指定SqlDbType.Int,您将一起避免这个问题。 这就是为什么您应该始终指定类型的原因。

在您的情况下,因为您没有指定类型,所以 .net 可能认为它是一个字符串,因此它正在寻找 size 属性。最好是明确的,如果你知道类型提供它,不要依赖一些可能会猜到它的自动过程。

在您的情况下,您可以这样做:

SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.SqlDbType = SqlDbType.Int;
errorParam.Direction = ParameterDirection.Output;

因为它是一个int你不需要指定大小。

于 2016-01-29T18:43:13.070 回答