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

本文关键字:MS SQL Server 无效 参数 数据类型 UInt32 | 更新日期: 2023-09-27 18:29:04

通常,我们应该将整数值传递给存储过程,为此,我们通常使用方法

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()

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

根据提供的引用,Sql中不支持UInt32

不支持从UInt32推断SqlDbType

因此,最好将参数传递为;

command.Parameters.Add("@param1", SqlDbType.Int).Value = Convert.ToInt32(paramValue);

正如您可以尝试的那样:

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

您可以查看此链接了解更多信息。

ADO.NET中不支持UInt16。请使用Int64而不是UInt16。欲了解更多信息,请访问:https://msdn.microsoft.com/library/yy6y35y8(v=vs.100).aspx

您可以像传递string一样传递它。使用UInt32.ToString()。这是完美的工作。