UInt32的参数数据类型无效。(MS SQL Server)

5

一般来说,我们应该向存储过程传递整数值,而我们通常使用以下方法进行操作:

command.Parameters.AddWithValue("@param1", paramValue);

但是,我发现如果我们需要使用上述方法将uint数据类型参数传递给存储过程,它会产生奇怪的异常。尽管当代码执行ExecuteNonQuery方法时并没有出现异常,但是在此之后会出现异常。我不确定为什么会这样。如果有人有任何分享,请...

以下是堆栈跟踪:

   at System.Data.SqlClient.MetaType.GetMetaTypeFromValue(Type dataType, Object value, Boolean inferLen, Boolean streamAllowed)
   at System.Data.SqlClient.SqlParameter.GetMetaTypeOnly()
   at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc)
   at System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc, Int32 startCount, Boolean inSchema, SqlParameterCollection parameters)
   at System.Data.SqlClient.SqlCommand.BuildRPC(Boolean inSchema, SqlParameterCollection parameters, _SqlRPC& rpc)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

我们不是超人,请把你的错误信息发布出来。 - Dhaval Patel
4
个人建议避免使用AddWithValue,而是使用Add,指定参数类型(例如SqlDbType.Int),然后设置Value属性。这样可以清楚地表明您想要传递到数据库的数据类型。 - Jon Skeet
4个回答

10
根据提供的参考文献UInt32在Sql中不受支持。

无法从UInt32推断SqlDbType

因此,最好将参数传递为;
command.Parameters.Add("@param1", SqlDbType.Int).Value = Convert.ToInt32(paramValue);

1

As you can try this:

cmd.Parameters.Add(new SqlParameter("@param", SqlDbType.Int));

您可以通过链接了解更多相关信息。

1

1
可以像这样传递string。使用UInt32.ToString()。它完美地工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接