打开前验证数据库文件架构

时间:2011-08-22 10:17:12

标签: c# wpf sql-server-ce

我有一个保存和打开数据的应用程序(保存为 SQL CE 数据库文件)。每次保存项目时,都会生成一个新的.sdf文件,其中包含由我的代码定义的表结构,我不需要对其进行任何验证。

我担心的是当用户在OpenFileDialog中导入(打开).sdf文件时,用户可能会选择从不同应用程序生成的数据库文件(即具有不同的表模式)。我需要验证导入数据库表模式,否则如果打开并处理了错误的数据库文件,应用程序可能会崩溃。

我不需要比较文件之间的模式。我只需要检查数据库文件是否包含某个表结构或表名(我认为这应该足以满足我的目的)。最简单的方法是什么?

[编辑]

我使用以下方法验证数据库文件,该文件有效。我使用字符串数组来检查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 个答案:

答案 0 :(得分:1)

打开数据库(确保对此进行错误处理,因为用户可以指向任何文件)。

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

如果这返回数据,那么你的表就在那里。