OdbcConnection.GetSchema("TABLES"); not working
本文关键字:quot not working TABLES OdbcConnection GetSchema | 更新日期: 2023-09-27 18:19:23
我猜不是所有的SQL都是平等创建的。我正在深入研究c#中的dsn和ODBC驱动程序的世界,并尝试了一下。我试图获得由DSN定义的数据库中的所有表,我所知道的是使用transsoft ODBC驱动程序。我可以连接到它并使用代码返回表:
public void ConnectToData(String dsn)
{
System.Data.Odbc.OdbcConnection conn =
new System.Data.Odbc.OdbcConnection();
//conn.ConnectionString = "FIL=MS Access;DSN=" + dsn;
conn.ConnectionString = "DSN=" + dsn; //dsn equals "Company_Shared"
try
{
conn.Open();
MessageBox.Show("Connected!");
lstBoxLogs.Items.Add("Connected");
DataTable tableschema = conn.GetSchema("TABLES");
DataSet set = tableschema.DataSet;
// first column name
for (int i = 0; i < tableschema.Columns.Count; i++)
{
lstBoxLogs.Items.Add(tableschema.Columns[i].ColumnName);
}
lstBoxLogs.Refresh();
MessageBox.Show(tableschema.Columns.Count + " tables found");
}
catch (Exception ex)
{
MessageBox.Show("Failed to connect to data source: " + ex.GetBaseException().Message);
}
finally
{
conn.Close();
}
}
它连接良好,并报告表,但不是表,我知道我在数据库中寻找什么回来是以下内容:
TABLE_QUALIFIER
TABLE_OWNER
TABLE_NAME
TABLE_TYPE
REMARKS
我不确定如何从这些信息中获得实际的表名称,所以我可以只是转储每个表中的所有数据(这就是我想要做的)。这是因为我必须仔细研究transsoft数据库使用什么样的SQL,它是否使conn.GetSchema("TABLES");
调用无用?
这样行吗?
using(DataTable tableschema = conn.GetSchema("TABLES"))
{
// first column name
foreach(DataRow row in tableschema.Rows)
{
lstBoxLogs.Items.Add(row["TABLE_NAME"].ToString());
}
}
EDIT:修复了不使用数据集的代码。
EDIT:更新了代码,以便将来的读者实现处置DataTable
的最佳实践。