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