如何确定数据集中是否有任何表,而没有得到“找不到表0”错误信息?

时间:2013-03-26 22:47:53

标签: c# compact-framework sql-server-ce windows-ce

我有这样的代码:

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

2 个答案:

答案 0 :(得分:1)

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

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

此外,您可以通过查看QtyDS.Tables.Count来查找表计数。如果它大于0,则表格为。

答案 1 :(得分: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 );
}