SQLDataReader 不识别空列
SQLDataReader does not identify the empty columns
所以,我有一个函数可以读取稍后在程序中使用的查询结果,如下所示:
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}
和我有同样的问题。查询应该 return 一个值。
我做错了什么吗?
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;
所以,我有一个函数可以读取稍后在程序中使用的查询结果,如下所示:
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}
和我有同样的问题。查询应该 return 一个值。 我做错了什么吗?
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;