我知道还有一些关于此错误的其他线索/问题,但我想在可能的情况下获得更多洞察力。我们已经看到,对于我们有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 ,
答案 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
,因此您无需指定尺寸。