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

发布于 2024-11-30 21:46:50 字数 1345 浏览 0 评论 0原文

我有一个保存和打开数据的应用程序(保存为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();
        }
    }
}

I have an application that saves and opens data (which is saved as SQL CE database file). Every time the project gets saved, a new .sdf file is generated with table structure defined by my code and I do not need to run any validation against it.

My concern is when user import (open) the .sdf file in a OpenFileDialog, there will be chance user may select a database file generated from a different application (i.e. having a different table schema). I would need to validate the importing database table schema or the application may crash if the wrong database file is opened and processed.

I do not need to compare schema between files. All I need is to check if the database file contain a certain table structure or table names (which I think should be sufficient for my purpose). What is the easiest way to do this?

[EDIT]

I used the following method to validate the database file, which works. I use a string array to checked against a SqlCeDataReader (which stores the Table name). It works but I wonder if there's an even easier way - is there a build in method in .NET to use?

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();
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不在是我 2024-12-07 21:46:50

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

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

如果返回数据,则您的表就在那里。

Open the database (make sure to have error handling for this, as the user can point to any file).

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

If this returns data, your table is there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文