在打开之前验证数据库文件架构
Posted
技术标签:
【中文标题】在打开之前验证数据库文件架构【英文标题】:Validate database file schema before open 【发布时间】:2011-08-22 10:17:11 【问题描述】:我有一个保存和打开数据的应用程序(保存为 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();
【问题讨论】:
如果你使用的是4.0,你也可以使用GetSchema("TABLES"),它返回一个带有表名的DataTable。 【参考方案1】:打开数据库(确保对此进行错误处理,因为用户可以指向任何文件)。
运行:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'MyTable'
如果这返回数据,您的表就在那里。
【讨论】:
以上是关于在打开之前验证数据库文件架构的主要内容,如果未能解决你的问题,请参考以下文章