【问题标题】:How do I convert this VB.NET code to C#? [closed]如何将此 VB.NET 代码转换为 C#? [关闭]
【发布时间】:2023-03-09 04:50:01
【问题描述】:
Dim MaxItemID As Integer
Dim objCMD As New SqlCommand(StrSql, objConn)  
MaxItemID = IIf(IsDBNull(objCMD.ExecuteScalar()), 0, objCMD.ExecuteScalar()) + 1

如何在 C# 中做到这一点?

【问题讨论】:

标签: .net vb.net ado.net vb.net-to-c#


【解决方案1】:
int MaxItemID = 0;
using(SqlCommand objCMD = new SqlCommand(StrSql, objConn))
{
    MaxItemID = (Converter.IsDBNull(objCMD.ExecuteScalar()) ? 0 : objCMD.ExecuteScalar()) + 1;
}

【讨论】:

  • 改用Converter.IsDBNull
  • 没有 Converter.IsDBNull。使用 System.Convert.IsDBNull。
【解决方案2】:

应该这样做(并避免执行两次 SQL):

var objCMD = new SqlCommand(StrSql, objConn);
var sqlRes = objCMD.ExecuteScalar();
int maxItemID = 1 + (Convert.IsDBNull(sqlRes) ? 0 : (int)sqlRes);

注意 VB 会将 ExecuteScalarobject 返回隐式转换为 int,但 C# 不会。

【讨论】:

  • 你从哪里得到“Converter.IsDBNull”?
  • @DaveDoknjas 我的想象,当然应该是Convert.IsDBNull(会正确)。
  • 这很奇怪,因为我也在另一个答案中看到了它。我想这可能是 .NET 4.5 中的一些新类。
  • @DaveDoknjas 那是因为我在回答时懒得检查类名(我知道方法名......而其他答案有它......)。我应该知道得更好,总是必须更正 DbNUll 处理(同时希望 Nullable<T> 可以改装到 ADO.NET 中)。
【解决方案3】:
int MaxItemID;
SqlCommand objCMD =new SqlCommand (StrSql, objConn);
MaxItemID = IsDBNull(objCMD.ExecuteScalar()? 0: objCMD.ExecuteScalar()) + 1;

【讨论】:

  • C# 中没有全局“IsDBNull”。用户 System.Convert.IsDBNull。
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2018-08-22
相关资源
最近更新 更多