检查 MS Access 数据库表,如果不存在则创建它
Posted
技术标签:
【中文标题】检查 MS Access 数据库表,如果不存在则创建它【英文标题】:Check for MS Access database table if not exist create it 【发布时间】:2011-01-25 12:34:55 【问题描述】:如何以编程方式?
【问题讨论】:
【参考方案1】:您可以遍历表名以检查特定表。请参阅下面的代码以获取表名。
string connectionstring = "Your connection string";
string[] restrictionValues = new string[4]null,null,null,"TABLE";
OleDbConnection oleDbCon = new OleDbConnection(connectionString);
List<string> tableNames = new List<string>();
try
oleDbCon.Open();
DataTable schemaInformation = oleDbCon.GetSchema("Tables", restrictionValues);
foreach (DataRow row in schemaInformation.Rows)
tableNames.Add(row.ItemArray[2].ToString());
finally
oleDbCon.Close();
【讨论】:
+1,比仅仅捕获错误更优雅。请删除catch throw;
,不过:这是一个 NOOP。【参考方案2】:
要检查表是否存在,您可以像这样扩展 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。
【讨论】:
【参考方案3】:如果表存在则执行以下代码,否则将返回错误,否则将创建一个新表:
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 <yourtable name>(<columns>)";
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
catch(OleDbException e)
if(e.ErrorCode == 3010 || e.ErrorCode == 3012)
// if error then table exist do processing as required
如果表已存在,则返回这些错误代码 - 全部为 check here。
【讨论】:
【参考方案4】:一个简单的方法是
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;
【讨论】:
【参考方案5】:为了完整起见,我会指出,不久前我发布了 4 种不同的编码方式 TableExists() function within Access。在 MSysObjects 上运行 SQL SELECT 的版本可以在 Access 外部运行,但在某些情况下,您可能会遇到安全错误(因为不允许您访问 Jet/ACE 系统表)。
【讨论】:
以上是关于检查 MS Access 数据库表,如果不存在则创建它的主要内容,如果未能解决你的问题,请参考以下文章
MS SQL 2008/Access 2002 VBA - 检查数据库的当前记录,如果不存在则输入
如何通过VBscript检查MS Access中是不是存在表