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()
根据提供的引用,Sql中不支持UInt32
。
不支持从
UInt32
推断SqlDbType
。
因此,最好将参数传递为;
command.Parameters.Add("@param1", SqlDbType.Int).Value = Convert.ToInt32(paramValue);
正如您可以尝试的那样:
cmd.Parameters.Add(new SqlParameter("@param", SqlDbType.Int));
您可以查看此链接了解更多信息。
UInt16
。请使用Int64
而不是UInt16
。欲了解更多信息,请访问:https://msdn.microsoft.com/library/yy6y35y8(v=vs.100).aspx
您可以像传递string
一样传递它。使用UInt32.ToString()
。这是完美的工作。