c# - Int32.TryParse() 或 (int?)command.ExecuteScalar()

标签 c# .net ado.net tryparse executescalar

我有一个 SQL 查询,它只返回一个字段 - 一个 INT 类型的 ID。

而且我必须在 C# 代码中将它用作整数。

哪种方式更快并且占用更少的内存?

int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
  // use id
}

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}

int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
  // use id.Value
}

最佳答案

这三种性能之间的差异可以忽略不计。瓶颈是将数据从数据库移动到您的应用程序,而不是简单的转换或方法调用。

我会选择:

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}

较早失败,如果有一天人们更改命令以返回字符串或日期,至少它会崩溃,您将有机会修复它。

我也只使用简单的 int cast IF 我一直希望命令返回一个结果。

请注意,与执行标量相比,我通常更喜欢返回输出参数,因为执行标量感觉很脆弱(第一行第一列是返回值的约定不适合我)。

关于c# - Int32.TryParse() 或 (int?)command.ExecuteScalar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174930/

相关文章:

c# - 复合键不尝试保留键值

c# - 无法识别元素 <PackageReference> 中的属性 "Version"

c# - 为什么 System.Net.Http 从全局程序集缓存加载所有程序集名称?

entity-framework - 如何在 Visual Studio 2010 中手动编辑 ADO.NET 中的表映射?

database - 获取 VistaDB 中列的 'Identity' 设置

c# - 如何修复 Visual Studio 2019 中的错误 CS0246

c# - 循环一个数组

c# - .Net 增加了我的开发时间——我是不是遗漏了什么?

c# - JWT TOKEN 生成 Client_Assertion

asp.net - 为什么此代码会导致错误?