输出SqlParameter错误:Size属性的大小无效

时间:2016-01-29 18:36:57

标签: c# sql stored-procedures sqlparameter output-parameter

我知道还有一些关于此错误的其他线索/问题,但我想在可能的情况下获得更多洞察力。我们已经看到,对于我们有Integer类型输出参数的特定代码段,间歇性地发生此错误。

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

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

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

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

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

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

@ErrorCode              INT                 OUT ,

1 个答案:

答案 0 :(得分:0)

如果类型是字符串,则需要大小,类型为int。您需要指定SqlDbType.Int,并且您将一起避免此问题。 Here's why you should always specify the type.

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

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

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

由于它是int,因此您无需指定尺寸。