Проверьте схему файла базы данных перед открытием - PullRequest
1 голос
/ 22 августа 2011

У меня есть приложение, которое сохраняет и открывает данные (которые сохраняются как SQL CE файл базы данных). Каждый раз, когда проект сохраняется, создается новый файл .sdf со структурой таблицы, определенной моим кодом, и мне не нужно выполнять какую-либо проверку для него.

Меня беспокоит то, что когда пользователь импортирует (открывает) файл .sdf в OpenFileDialog, у пользователя будет возможность выбрать файл базы данных, сгенерированный из другого приложения (то есть с другой схемой таблицы). Мне нужно будет проверить схему таблицы импортируемой базы данных, иначе приложение может аварийно завершить работу, если будет открыт и обработан неправильный файл базы данных.

Мне не нужно сравнивать схемы между файлами. Все, что мне нужно, это проверить, содержит ли файл базы данных определенную структуру таблицы или имена таблиц (что, я думаю, должно быть достаточно для моих целей). Какой самый простой способ сделать это?

[EDIT]

Я использовал следующий метод для проверки файла базы данных, который работает. Я использую строковый массив для проверки SqlCeDataReader (который хранит имя таблицы). Это работает, но мне интересно, есть ли еще более простой способ - есть ли способ использования в .NET для использования?

using (SqlCeConnection conn = new SqlCeConnection(validateConnStr))
{
    using (SqlCeCommand cmd = new SqlCeCommand(@"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", conn))
    {
        try
        {
            conn.Open();
            SqlCeDataReader rdr = cmd.ExecuteReader();
            string[] tableArr = { "FirstTable", "SecondTable" };
            int ta = 0;
            while (rdr.Read())
            {
                if (rdr.GetString(0) != tableArr[ta])
                {
                    isValidDbFile = false;
                }
                else
                {
                    isValidDbFile = true;
                }
                ta++;
            }
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.ToString());
        }
        finally
        {
            conn.Close();
        }
    }
}

1 Ответ

1 голос
/ 22 августа 2011

Откройте базу данных (убедитесь, что для этого есть обработка ошибок, поскольку пользователь может указать на любой файл).

run: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'MyTable '

Если это возвращает данные, ваша таблица там.

...