Int32.TryParse() 或 (int?)command.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
}
I have a SQL query which returns only one field - an ID of type INT.
And I have to use it as integer in C# code.
Which way is faster and uses less memory?
int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
// use id
}
or
int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
// use id.Value
}
or
int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
// use id.Value
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
三者之间的性能差异可以忽略不计。 瓶颈是将数据从数据库移动到您的应用程序,而不是简单的转换或方法调用。
我会同意:
它会更早失败,如果有一天人们更改命令以返回字符串或日期,至少它会崩溃,并且您将有机会修复它。
我也只会使用一个简单的
int
强制转换 IF 我总是希望该命令返回单个结果。请注意,我通常更喜欢返回输出参数而不是执行执行标量,执行标量感觉很脆弱(第一行中的第一列是返回值的约定不适合我)。
The difference between the three performance wise is negligible. The bottleneck is moving the data from the DB to your app, not a trivial cast or method call.
I would go with:
It fails earlier, if one day people change the command to return a string or a date, at least it will crash and you will have a chance to fix it.
I would also just go with a simple
int
cast IF I always expected the command to return a single result.Note, I usually prefer returning an out param than doing the execute scalar, execute scalar feels fragile (the convention that the first column in the first row is a return value does not sit right for me).
如果您希望命令返回 null,则应记住数据库 null (DBNull) 与 .NET null 不同。 那么,将 DBNull 转换为 int 呢? 会失败的。
我建议如下:
If you expect the command to return null, you should keep in mind that database null (DBNull) is not the same as .NET null. So, conversion of DBNull to int? would fail.
I'd suggest the following:
如果以上方法都不起作用(特别是对于正在与 MySQL 作斗争的用户)
你为什么不尝试以下方法呢?
If none of the above works (especially for users who are battling with MySQL)
why don't you try the following?
将在 C# 中工作。
will work in C#.
后者。
Convert.ToInt32()
也是一个选项。The latter.
Convert.ToInt32()
is also an option.使用 id.HasValue 获得最大的可空类型酷因子!
Use id.HasValue for maximum Nullable Type cool-factor!