Проверьте таблицу базы данных MS Access, если она не существует, создайте ее - PullRequest
9 голосов
/ 25 января 2011

Как вы программно проверяете таблицу базы данных MS Access, если ее нет, то создаете ее?

Ответы [ 5 ]

13 голосов
/ 25 января 2011

Вы можете выполнять итерации по именам таблиц для проверки конкретной таблицы.Посмотрите код ниже, чтобы получить имена таблиц.

        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();
        }           
9 голосов
/ 16 сентября 2014

Чтобы проверить, существует ли таблица, вы можете расширить 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.

8 голосов
/ 25 января 2011

Просто выполните следующий код, если таблица будет существовать, она вернет ошибку, иначе она создаст новый:

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
}

Эти коды ошибок возвращаются, если таблица уже существует - проверьте здесь для всех.

2 голосов
/ 13 мая 2015

простой способ сделать это -

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;
        }
    }
1 голос
/ 27 января 2011

Для полноты картины я укажу, что некоторое время назад я опубликовал 4 различных способа кодирования функции TableExists () в Access .Версия, которая запускает SQL SELECT для MSysObjects, будет работать извне Access, хотя в некоторых случаях вы можете получить ошибку безопасности (поскольку у вас нет доступа к системным таблицам Jet / ACE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...