SQLDataReader不识别空列

本文关键字:识别 SQLDataReader | 更新日期: 2023-09-27 18:16:37

所以,我有一个函数,它读取查询结果,然后在程序中使用,如下所示:

connection.Open();
int combination;
using (SqlCommand com1 = new SqlCommand())
{
    com1.Connection = connection; 
    com1.CommandText = "select FinalComboId from relationTable where sourceCombo=@source and destinationCombo=@destination";
    com1.Parameters.Add(new SqlParameter("@source",combo.ToString() ?? ""));
    com1.Parameters.Add(new SqlParameter("@destination", destination ?? ""));
    SqlDataReader comboLinkReader = com1.ExecuteReader();
    if (!comboLinkReader.Read() || comboLinkReader.FieldCount==0)
    {
        ScriptManager.RegisterClientScriptBlock(this, GetType(),
                   "alertMessage", @"alert('Combination does not exists,please contact admin!')", true);
    }
    else 
    {
        combination = Convert.ToInt32(comboLinkReader["FinalComboId"]);
    }
}

我想实现的是:如果结果为空,则执行警报脚本,否则将结果保存为整数,这将用于进一步的计算。关于这个问题,我已经遵循了几个教程和示例,当我前几天执行这个函数时,它工作得很好。现在,在将其启动到生产环境的2小时后,它不计算第一个条件:

if (!comboLinkReader.Read() || comboLinkReader.FieldCount==0)
       {//calculations  here}

我也试过

if (!comboLinkReader.Read() || comboLinkReader.IsDbNull(0))
   {//calculations}

和我都有同样的问题。查询应该返回一个值。我做错了什么吗?

SQLDataReader不识别空列

IsDbNull是一个需要列索引参数的方法。

int? finalComboId = null;
if(comboLinkReader.Read() && !comboLinkReader.IsDbNull(0))
    finalComboId = comboLinkReader.GetInt32(0);
if(!finalComboId.HasValue)
    ScriptManager.RegisterClientScriptBlock(this, GetType(), "alertMessage", @"alert('Combination does not exists,please contact admin!')", true);
else 
    combination = finalComboId.Value;