conn.GetOleDbSchemaTable 这个方法为什么不能连续用两次? 第一次正确,第二次不能返回表结构

lys1706228 2008-12-09 11:06:03
foreach (string var in strTableName)
{


DataTable shemaColumnsInfo= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, var, null });



}
...全文
155 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gsmlove 2008-12-18
  • 打赏
  • 举报
回复
mark
WWWWA 2008-12-09
  • 打赏
  • 举报
回复
应该是程序问题,检查一下代码
wwwwb 2008-12-09
  • 打赏
  • 举报
回复
呵呵,程序问题吧,执行完后,关闭连接没有?用查询MYSQL系统表方法不行?
用ADO的OPENSCHEMA方法试试
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 WWWWA 的回复:]
//变量时,第一次循环没问题,第二次就是空表 :
一步一步地跟踪,连接打开没有、表名传进去函没有、
[/Quote]

肯定是传进去了,返回的有表头(字段),只是Row.count为0
WWWWA 2008-12-09
  • 打赏
  • 举报
回复
//变量时,第一次循环没问题,第二次就是空表 :
一步一步地跟踪,连接打开没有、表名传进去函没有、
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
conn.Open();
foreach (string var in strTableName)
{
// 常量时没有问题
DataTable shemaColumnsInfo3 = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "aa", null });
DataTable shemaColumnsInfo4 = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "bb", null });
//变量时,第一次循环没问题,第二次就是空表
DataTable shemaColumnsInfo1 = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, var, null });
DataTable shemaColumnsInfo2 = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, var, null });
}

conn.Close();
WWWWA 2008-12-09
  • 打赏
  • 举报
回复
用两个表名试试,因为conn在你的代码中关闭了(conn.Close(); ),第二次调用是否要重新打开
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 WWWWA 的回复:]
变量、对象(shemaColumnsInfo)是否要释放?
[/Quote]
----------
public DataTable GetColumnsInfo(string strTableName)
{
try
{
conn.Open();
return conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, strTableName, null });
}
catch
{
return null;
}
finally
{
conn.Close();
}
}
改成这样了,
一下调用方式
strTableNames[0]=“aa”

strTableNames[1]=“bb”

foreach (string strTableName in strTableNames)
{
if (strTableName.Length == 0)
{
return null;
}
DateAccess Dacc = new DateAccess(conn, strPath);
dt = Dacc.GetColumnsInfo(strTableName);
}
第二次返回的dt。rows。count还是为0
----------------------------------------------------------------

如果只要求返回单表结构
strTableNames[0]=“aa”

strTableNames[0]=“bb”
都可以正常

很郁闷!
WWWWA 2008-12-09
  • 打赏
  • 举报
回复
变量、对象(shemaColumnsInfo)是否要释放?
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 WWWWA 的回复:]
循环调用的代码?
[/Quote]
-------------------
public DataTable GetColumnsInfo(string strTableName)
{
DataTable shemaColumnsInfo=new DataTable();
try
{
conn.Open();

shemaColumnsInfo = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, strTableName,null });
}
catch
{
return null;
}
finally
{
conn.Close();
}

return shemaColumnsInfo;

}

这个方法有什么问题吗?

WWWWA 2008-12-09
  • 打赏
  • 举报
回复
循环调用的代码?
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
单个调用GetColumnsInfo 方法没问题,循环调用第二次,就范围0行,
lys1706228 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
呵呵,程序问题吧,执行完后,关闭连接没有?用查询MYSQL系统表方法不行?
用ADO的OPENSCHEMA方法试试
[/Quote]
-----------
public DataTable GetColumnsInfo(string strTableName)
{
DataTable shemaColumnsInfo=new DataTable();
try
{
conn.Open();

shemaColumnsInfo = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, strTableName,null });
}
catch
{
return null;
}
finally
{
conn.Close();
}

return shemaColumnsInfo;

}

7,712

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧