检查MS Access数据库表(如果不存在)创建它

如何以编程方式检查MS Access数据库表,如果不存在则创建它?

如果表存在,只需执行以下代码,它将返回错误,否则它将创建一个新的:

try { OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + frmMain.strFilePath + "\\ConfigStructure.mdb"); myConnection.Open(); OleDbCommand myCommand = new OleDbCommand(); myCommand.Connection = myConnection; myCommand.CommandText = "CREATE TABLE ()"; myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); } catch(OleDbException e) { if(e.ErrorCode == 3010 || e.ErrorCode == 3012) // if error then table exist do processing as required } 

如果表已经存在,则返回这些错误代码 – 请在此处查看所有错误代码。

您可以迭代表名以检查特定的表。 请参阅以下代码以获取表名称。

  string connectionstring = "Your connection string"; string[] restrictionValues = new string[4]{null,null,null,"TABLE"}; OleDbConnection oleDbCon = new OleDbConnection(connectionString); List tableNames = new List(); try { oleDbCon.Open(); DataTable schemaInformation = oleDbCon.GetSchema("Tables", restrictionValues); foreach (DataRow row in schemaInformation.Rows) { tableNames.Add(row.ItemArray[2].ToString()); } } finally { oleDbCon.Close(); } 

要检查表是否存在,您可以像这样扩展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; } } 

然后,您可以在OleDbConnection,SQLiteConnection或SqlConnection等任何派生类中调用TableExists。

一个简单的方法是

 public bool CheckTableExistance(string TableName) { // Variable to return that defines if the table exists or not. bool TableExists = false; // Try the database logic try { // Make the Database Connection ConnectAt(); // Get the datatable information DataTable dt = _cnn.GetSchema("Tables"); // Loop throw the rows in the datatable foreach (DataRow row in dt.Rows) { // If we have a table name match, make our return true // and break the looop if (row.ItemArray[2].ToString() == TableName) { TableExists = true; break; } } //close database connections! Disconnect(); return TableExists; } catch (Exception e) { // Handle your ERRORS! return false; } } 

为了完整起见,我会指出前一段时间我在Access中发布了4种编写TableExists()函数的方法 。 在MSysObjects上运行SQL SELECT的版本可以从Access外部工作,但在某些情况下,您可能会遇到安全性错误(因为您不允许访问Jet / ACE系统表)。