我有一个方法可以在数据库 (SQL Server) 中添加或更新记录,它返回 RecordID 作为 (Int32) 输出参数,成功/失败结果作为 (Int32) 返回值。
既然我指定了这些参数的类型,为什么我必须在它们返回时转换它们?
我希望使用以下内容:
enquiryID = cmd.Parameters["@EnquiryID"].Value;
...但我和向上必须跳过几个额外的箍:
enquiryID = Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString());
这不是世界末日,但它似乎只是一个冗长的解决方案。为什么 Parameters.Value 返回 SqlParameters.Value 对象而不是 Int32?
更新:
好的,我确信 - 直接转换 FTW:(int)cmd.Parameters["@EnquiryID"].Value
最佳答案
SQL Server 不指定它返回的数据类型,因此 C# 无法在处理之前推断类型。此外,SqlParamater 是通用的,因此它在 SQL Server 之间传递和传递对象。 SQL Server 正在执行转换。
此外,如果您知道它始终是一个整数,而不是使用 Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString())
,您可以只直接转换 (int)cmd.Parameters["@EnquiryID"].Value
。如果该值可能返回为 null,则您可以添加
object value = cmd.Parameters["@EnquiryID"].Value;
if(!value.Equals(DBNull.Value)
enquiryID = (int)value;
关于c# - 为什么必须转换 SQL 查询的返回参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148753/