如何检测没有列的access DB表?

  • 本文关键字:access DB 何检测 ms-access
  • 更新时间 :
  • 英文 :


我有一个我写的支持工具,允许我在MS Access DB文件中创建一个表。由于支持,我将其设置为只创建表而不定义任何列。该程序的另一部分允许创建列。但是,当我在列表中选择表时,我尝试加载表。由于表是空的,系统在Fill时抛出一个错误(我理解Select是原因)。有没有一种方法来询问表是否有任何列之前试图加载该表?

public static bool ConnectToDatabase(string dbTable)
{
return ConnectToDatabaseWStr(dbTable, "Select * From `" + dbTable + "`");
}
public static bool ConnectToDatabaseWStr(string dbTable, string strSQL)
{
try
{

conn = new OleDbConnection(connectionString);
}
catch (Exception e)
{
LogFile.write(1, "DataAccess: error detected when creating OLEDBConnection.nConnection string:n" + connectionString + "n" + e.ToString() + "n");
}
try
{
dataAdapter = new OleDbDataAdapter(strSQL, conn);
dataAdapter.Fill(DataSetList[iCurrDataSetListIndex].DataSetInstance, dbTable);

如果有列,这很容易。

你甚至可以选择SELECT * from tableName where ID = 0

然后为每个列名。然而,虽然上面的代码将返回0行,但仍然会返回列。但是,如果没有任何列,那么上述操作将失败,并且理论上您必须知道"id";列存在。

因此,您可以让oleDB提供程序将表作为"模式"返回。这是已定义表的ROWS表。因此,您可以这样使用:

如果没有返回行,那么我们没有一个表来布局和定义模式:

var strTableName = "tblHotels";
OleDbConnection myCon = new OleDbConnection(My.Settings.TestDB);
myCon.Open();
string[] SchemaParams = new[] { null, null, strTableName, null };
DataTable MyTable = myCon.GetSchema("Columns", SchemaParams);
if (MyTable.Rows.Count == 0)
// no columns for table
Debug.Print("no columns in table");
else
foreach (DataRow MyRow in MyTable.Rows)
Debug.Print(MyRow("Column_Name") + "->" + MyRow("Data_Type"));

最新更新