如何确定数据集中是否有任何表,而不获得“找不到表0”;err味精

本文关键字:找不到 找不到表 味精 err 集中 数据集 数据 何确定 是否 任何表 | 更新日期: 2023-09-27 18:05:57

我有这样的代码:

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

…这就是"cannot find table 0"

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

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

如何确定数据集中是否有任何表,而不获得“找不到表0”;err味精

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

删除注释

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 );
}

在没有看到其余代码的情况下,我假设您的查询没有返回任何内容。尝试在return( oDS );上放置一个断点,看看oDS有什么要说的。如果它里面没有任何东西,那么你的查询就不能正常工作。

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

同样,您可以通过检查QtyDS.Tables.Count来查找表计数。