Output SqlParameter Error: the Size property has an invalid size of 0
Output SqlParameter Error: the Size property has an invalid size of 0
我知道还有其他一些 threads/questions 关于这个错误,但如果可能的话,我想获得更多的见解。对于具有 Integer 类型输出参数的特定代码段,我们已经看到此错误间歇性发生。
这就是我们定义参数的方式:
SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.Direction = ParameterDirection.Output;
您会注意到没有大小,也没有指定 DBType。好像不是每次都会报这个错,但是有时候会报这个:
大小 属性 的大小为 0 无效。在 System.Data.SqlClient.SqlParameter.Validate(Int32 索引,布尔值 isCommandProc)
在 System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc,Int32 startCount,Boolean inSchema,SqlParameterCollection 参数)
我假设我需要添加 DBType 和 Size 设置,但潜在的原因可能是这种情况正在发生,并且仅在某些情况下发生?
注意,SQL中的参数定义为:
@ErrorCode INT OUT ,
如果类型是字符串,则需要大小,您的类型是整型。您需要指定 SqlDbType.Int
并且您将一起避免此问题。 Here's why you should always specify the type.
在你的情况下,因为你没有指定类型,所以 .net 可能认为它是一个字符串,因此它正在寻找大小 属性。最好是明确的,如果你知道提供它的类型,不要依赖一些可能猜到它的自动过程。
在你的情况下你可以这样做:
SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.SqlDbType = SqlDbType.Int;
errorParam.Direction = ParameterDirection.Output;
因为它是 int
你不需要指定大小。
我知道还有其他一些 threads/questions 关于这个错误,但如果可能的话,我想获得更多的见解。对于具有 Integer 类型输出参数的特定代码段,我们已经看到此错误间歇性发生。
这就是我们定义参数的方式:
SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.Direction = ParameterDirection.Output;
您会注意到没有大小,也没有指定 DBType。好像不是每次都会报这个错,但是有时候会报这个:
大小 属性 的大小为 0 无效。在 System.Data.SqlClient.SqlParameter.Validate(Int32 索引,布尔值 isCommandProc) 在 System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc,Int32 startCount,Boolean inSchema,SqlParameterCollection 参数)
我假设我需要添加 DBType 和 Size 设置,但潜在的原因可能是这种情况正在发生,并且仅在某些情况下发生?
注意,SQL中的参数定义为:
@ErrorCode INT OUT ,
如果类型是字符串,则需要大小,您的类型是整型。您需要指定 SqlDbType.Int
并且您将一起避免此问题。 Here's why you should always specify the type.
在你的情况下,因为你没有指定类型,所以 .net 可能认为它是一个字符串,因此它正在寻找大小 属性。最好是明确的,如果你知道提供它的类型,不要依赖一些可能猜到它的自动过程。
在你的情况下你可以这样做:
SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.SqlDbType = SqlDbType.Int;
errorParam.Direction = ParameterDirection.Output;
因为它是 int
你不需要指定大小。