c# - 为什么必须转换 SQL 查询的返回参数值?

标签 c# sql-server parameters casting return-value

我有一个方法可以在数据库 (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/

相关文章:

sql - 第 1 行第 4 列(年份)的批量加载数据转换错误(类型不匹配或指定代码页的字符无效)

r - 稳定分布对数似然和 AIC 值

c++ - 如何在 C++ 中正确使用用户输入的参数

c# - 如何在另一个类的 CacheItemPolicy 上实现 UpdateCallback?

c# - 是否有更好的方法使用 LINQ 拆分此字符串?

MySQL 到 MSSQL 数据类型传输

asp.net - 设置网页来搜索 SQL 数据库的最快、最简单的方法?

c# - 访问 RSA key 容器

c# - 如何指定在哪个文件夹中创建新的 Outlook AppointmentItems?

javascript - Kendo UI 网格读取操作参数不起作用