0

我有这样的代码:

DataSet QtyDS = null;
. . .
QtyDS = GetAllUPCDSDRecords(txtUPC.Text);

...那是因为“找不到表 0”而爆炸

为了防止这种情况发生,我尝试了以下方法,但均无济于事;当我尝试访问数据集中的第一个表时,我仍然收到该错误消息:

1)

if (null != QtyDS)

2)

string table0 = QtyDS.Tables[0].ToString();
if (!table0.Equals(string.Empty))

3)

if (null != QtyDS.Tables[0])

如何安全地确定查询是否返回数据集以避免错误消息?

更新

public DataSet getAllUPCDSDRecords(string upc)
{
    string query = string.Format(
        "SELECT tyger_id as tyger, upc_source as UPC, description as Descrip, unit_qty as Qty, "+
        "department as Dept, vendor_id as Ven, upc_pack_size as UPCPK, pack_size as PKSize, "+
        "unit_cost as Cst, unit_list as Lst "+
        "FROM {0} WHERE upc_source = {1}", tablename, upc);
    return dbconn.getDataSet(query);
}

public DataSet getDataSet( string dynSQL )
{
    checkConnection();

    SqlCeDataAdapter oDA = new SqlCeDataAdapter( dynSQL, objCon );
    DataSet          oDS = new DataSet( "Command" );

    try
    {
        oDA.Fill( oDS );
    } 
    catch
    {
        //SSCS.ExceptionHandler(ex, "DBConnection.getDataSet");
    }

    return( oDS );
} // getDataSet
4

2 回答 2

1

如果没有看到您的其余代码,我会假设您的查询没有返回任何内容。尝试放置一个断点return( oDS );,看看oDS有什么要说的。如果其中没有任何内容,则您的查询无法正常工作。

您可能需要检查查询语法或连接字符串。

此外,您可以通过检查找到表数QtyDS.Tables.Count。如果它大于 0,则您有表。

于 2013-03-26T23:13:01.837 回答
1

看起来您正在吞咽并忽略您的错误,这会让您认为您的代码运行良好,而实际上并非如此。

删除评论。

public DataSet getDataSet( string dynSQL )
{
  checkConnection();

  SqlCeDataAdapter oDA = new SqlCeDataAdapter( dynSQL, objCon );
  DataSet          oDS = new DataSet( "Command" );

  try
  {
      oDA.Fill( oDS );
  } 
  catch (Exception ex)
  {
      Console.WriteLine(ex.Message);
  }

  return( oDS );
}

只需在 上放一个断点Console.WriteLine即可读取错误是什么。一旦解决了这个问题,您就应该删除整个try...catch例程,这样如果出现故障,它就不会对您隐藏。

更进一步,更改签名并检查该checkConnection方法:

public DataSet getDataSet( string dynSQL )
{
  var oDS = new DataSet("Command");
  try
  {
    if (!checkConnection()) {
      throw new Exception("No connection to database.");
    }
    using (var oDA = new SqlCeDataAdapter(dynSQL, objCon)) {
      oDA.Fill(oDS);
    }
  } 
  catch (Exception ex)
  {
      Console.WriteLine(ex.Message);
  }

  return( oDS );
}
于 2013-03-27T13:30:12.470 回答