【问题标题】:Getting errors with SqlParameter and ExecuteScalar使用 SqlParameter 和 ExecuteScalar 出现错误
【发布时间】:2013-10-09 19:14:46
【问题描述】:
public TransImport()
{
    ConnString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
    conn_new = new SqlConnection(ConnString);
    command_serial_new = conn_new.CreateCommand();
    command_serial_new.CommandText = "SELECT 1 FROM YSL00 WHERE SERLNMBR = @slnr";
    var p = new SqlParameter("@slnr", SqlDbType.NVarChar, 50);
    command_serial_new.Parameters.Add(p);
    //Here you will start reading flat file to get serialnumber. 
    //Here I have shown a simple call using one value 12345 but it will be 1000's of
    //lines from flatfile.

    if (CheckSerialNumber('12345'))
        DisplayMessage("Good serialnumber"); //this function is not copied here.
}

private Boolean CheckSerialNumber(string SerialNumber)
{
    command_serial_new.Parameters["@slnr"].Value = SerialNumber;
    try
    {
        var itExists = (Int32)command_serial_new.ExecuteScalar() > 0;
        if (itExists)
        {
            return true;
        }
    }
    catch (Exception ex)
    {
        LogException(ex, "Error in CheckSerialNumber =>"+ command_serial_new.CommandText.ToString());
    }
    return false;
}

我在上面的捕获中遇到错误。它提到了

对象引用未设置为对象实例

带有ExecuteScalar 的行失败。

我想我在这里做错了什么,但到目前为止无法弄清楚。

更新 1:我已经修改了这个问题。基本上,我针对我面临的问题创建了另一个问题。我也将其标记为已回答。

这是我刚刚发布的新问题。

Getting timeout errors with SqlTransaction on same table

【问题讨论】:

  • 您是否尝试过调试,并检查 command_serial_new.ExecuteScalar() 的值?您在一行中同时转换和比较值,这使故障排除变得复杂。
  • @DaveSwersky:我已经更新了我的问题。请检查

标签: c# sql sqlcommand


【解决方案1】:

如果ExecuteScalar() 返回null,就会发生这种情况。 (例如,因为没有匹配的行)

由于int是值类型,所以不能为null;因此,您会收到错误消息。

相反,您可以将其强制转换为 int?,它可以为空。

【讨论】:

    【解决方案2】:

    @SLaks 的答案是正确的。

    这是避免错误的另一种方法。不需要空值检查等,Convert.ToInt32 会处理所有事情。

    var itExists = Convert.ToInt32(command_serial_new.ExecuteScalar()) > 0;
    

    【讨论】:

    • 我建议你创建一个新问题
    • 我将创建新问题。
    【解决方案3】:

    尝试:

    int i;
    object o = command_serial_new.ExecuteScalar();
    if(o != null && Convert.ToInt32(o.ToString()) > 0)
    {
    
       //....
    }
    

    验证您的查询是否返回了某些内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2014-04-21
      相关资源
      最近更新 更多