好吧,我知道这个案子已在网上讨论过,但我仍然不明白。
到目前为止,这是我的搜索结果:
"SELECT table_name AS Name FROM INFORMATION_SCHEMA.Tables WHERE TABLE_TYPE = 'BASE TABLE'";
在这个SQL代码中,我认为INFORMATION_SCHEMA
是一个数据库名称,当我执行代码(当然使用连接的数据库名称)时,抛出了一个异常,说数据库名称不存在
更新
当我运行SQL查询并使用:
执行它时OleDbDataReader reader = cmd.ExecuteReader();
它说:Could not find: path/INFORMATION_SCHEMA.mdb;
我已经做过的事情很好,但是:
解决
我的最终代码在其他人的帮助下是:
DataTable MySchemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] { null, null, null, "TABLE" });
for (int i = 0; i < MySchemaTable.Rows.Count; i++) {
combobox1.Items.Add(MySchemaTable.Rows[i].ItemArray[2].ToString()); }
另一个搜索是:
`DataTable T = con.GetSchema("Tables");`
当我打印出t.ToString();
时,它只显示表格。
还有更多搜索。
CASE CLOSED!
答案 0 :(得分:0)
INFORMATION_SCHEMA
不是数据库名称,它是每个数据库中都存在的模式。它包含为您提供有关数据库结构的信息的视图。
信息架构视图是SQL Server为获取元数据提供的几种方法之一。信息架构视图提供SQL Server元数据的内部系统表独立视图。尽管已对基础系统表进行了重大更改,但信息模式视图使应用程序能够正常工作。 SQL Server中包含的信息架构视图符合INFORMATION_SCHEMA的ISO标准定义。
您的查询将为您提供所有表的名称,在您的连接字符串中,您应指定要为其获取所有表的数据库名称。
有关MSDN的INFORMATION_SCHEMA
的更多信息。
答案 1 :(得分:0)
在开始查询之前,您是否可以尝试使用数据库? 像这样:
USE [databaseName]
GO
SELECT table_name AS Name FROM INFORMATION_SCHEMA.Tables WHERE TABLE_TYPE = 'BASE TABLE'
因此,您可以确定,在开始查询之前,您已连接到良好的数据库
答案 2 :(得分:0)
您不能在OLEDB中使用INFORMATION_SCHEMA,它有不同的方式来提供其表信息。看看GetOleDbSchemaTable。它看起来像:
MySchemaTable = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
文档说明here:
OLE DB的.NET Framework数据提供程序也公开了架构 使用GetOleDbSchemaTable方法的信息 OleDbConnection对象。作为参数,GetOleDbSchemaTable需要一个 OleDbSchemaGuid,用于标识要返回的架构信息,以及 对这些返回列的一系列限制。 GetOleDbSchemaTable返回填充了请求的DataTable 架构信息。
答案 3 :(得分:0)
不需要所有这些麻烦。您只需关注this answer
即可要检查表是否存在,您可以像这样扩展DbConnection:
public static class DbConnectionExtensions { public static bool TableExists(this DbConnection conn, string table) { conn.open(); var exists = conn.GetSchema("Tables", new string[4] { null, null, table, "TABLE" }).Rows.Count > 0; conn.close(); return exists; } }
然后你可以在任何派生类中调用TableExists OleDbConnection,SQLiteConnection或SqlConnection。