C# 如何确定数据集中是否有任何表,而不获取;找不到表0“;味精?

C# 如何确定数据集中是否有任何表,而不获取;找不到表0“;味精?,c#,compact-framework,sql-server-ce,windows-ce,C#,Compact Framework,Sql Server Ce,Windows Ce,我有这样的代码: DataSet QtyDS = null; . . . QtyDS = GetAllUPCDSDRecords(txtUPC.Text); …出现“找不到表0” 为了防止这种情况发生,我尝试了以下方法,但都无济于事;当我尝试访问数据集中的第一个表时,仍然会收到错误消息: (一) (二) (三) 如何安全地确定查询是否返回数据集以避免错误消息 更新 在没有看到其余代码的情况下,我假设您的查询没有返回任何内容。尝试在return(oDS)上放置断点看看oDS有什么要说的。如果其中

我有这样的代码:

DataSet QtyDS = null;
. . .
QtyDS = GetAllUPCDSDRecords(txtUPC.Text);
…出现“找不到表0”

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

(一)

(二)

(三)

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

更新
在没有看到其余代码的情况下,我假设您的查询没有返回任何内容。尝试在
return(oDS)上放置断点
看看oDS有什么要说的。如果其中没有任何内容,则表示您的查询无法正常工作

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


此外,您还可以通过检查
QtyDS.Tables.count
来查找表计数。如果大于0,则有表。

看起来您正在接受并忽略错误,这会让您认为代码运行正常,而实际情况并非如此

删除注释

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

在我看来,问题实际上可能出在
GetAllUPCDSDRecords
方法中。你能发布它的代码吗?除此之外,您可以使用
QtyDS.tables.Count
测试表的数量。好的,添加上面的其他代码。Dataset.tables没有Count属性,至少在我的史前版本(“Hello from.NET 1.1,一片遥远的土地,等等”)中没有。但是,
Dataset.tables.List.Count
。不那是受保护的。嗯。嗯.NET1.1,让我回想一下吧!:)尽管这不是一种很好的方法,但您是否可以简单地捕获在尝试访问
数据集中的表时发生的
数据异常
?当该表确实存在时,您显然不会得到异常,因此您可以将其用作测试该表是否存在。不能使用断点-这是一个Windows CE项目,必须在模拟器中运行或直接在设备上运行,但由于基于我的设置和我使用的软件的旧版本的限制,我不能这样做。我必须有“创造性”(老派)来调试这个。有关详细信息,请参见Aha。你有办法在有问题的数据库上运行查询吗?您至少可以消除查询语法这一可能的问题。另外,尝试遍历表本身:
foreach(QtyDS.tables中的DataTable myTable){Console.WriteLine(myTable.TableName);}
。如果您得到了输出,那么就有了表;它们是SQLCE表,我没有Data Explorer之类的实用工具。这是我所使用的一切的一个古老版本,我们都习惯于做现代开发的细节和酷工具通常是不可用的。我比马戏团里的孟加拉虎跳得还多。能设置一个断点会很好,但我现在正在写日志文件,这很有帮助。奇怪的是,checkConnection()并没有返回一本书——它是一个void方法(?!?)
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
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 );
}
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 );
}