我猜测并非所有SQL都是同等创建的。我正在深入了解c#中的DSN和ODBC驱动程序的世界,并且有点了解它。我试图获取由DSN定义的数据库中的所有表,我所知道的只是使用Transoft 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
我不知道如何从这些信息中获取实际的表名,所以我可以将所有数据转储到每个表中(这就是我想要做的)。这是因为我必须阅读transoft数据库使用什么类型的SQL并使conn.GetSchema("TABLES");
调用无效?
答案 0 :(得分:4)
这会有用吗?
using(DataTable tableschema = conn.GetSchema("TABLES"))
{
// first column name
foreach(DataRow row in tableschema.Rows)
{
lstBoxLogs.Items.Add(row["TABLE_NAME"].ToString());
}
}
编辑:修复了不使用DataSet的代码。
编辑:更新了未来读者的代码,以实施处置DataTable
的最佳做法。