我有这样的代码:
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
答案 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 );
}