当前位置:  开发笔记 > 编程语言 > 正文

如果数据库丢失,使SQLite连接失败?(删除/移动)

如何解决《如果数据库丢失,使SQLite连接失败?(删除/移动)》经验,为你挑选了1个好方法。

我里面有以下方法class DBConnection.我调用这样的方法:SQLiteConnection conn = DBConnection.OpenDB();当我想打开一个连接时,我可以执行我的查询.当我想关闭连接时,我可以调用类似的方法.

方法:

public static SQLiteConnection OpenDB()
{
    try
    {
        //Gets connectionstring from app.config
        string myConnectString =
            ConfigurationManager.ConnectionStrings[
                "LegMedSQLLite.Properties.Settings.LegMedSQLLiteDBConnectionString"].ConnectionString;

        var conn = new SQLiteConnection(myConnectString);

        conn.Open();
        return conn;
    }
    catch (SQLiteException e)
    {
        MessageBox.Show(e.ToString(), "TEST");
        return null;
    }
}

这一切都很好,花花公子.问题是尝试捕获.让我们想象以下场景:

数据库文件已被移动/删除.

永远不会抛出异常.实际上,我偶然发现的第一个问题是当我执行我的第一个查询时 - 它认为没有这样的表,它会抛出自己的异常.我被这种奇怪的现象震惊了,但我很快发现SQLite创建了一个新的 数据库.空是意味着没有表,没有,只是一个SQLT数据库文件与旧数据库同名,应该在那里.

这是一个问题,我希望应用程序在我尝试调用时立即知道是否存在错误(数据库未找到,已损坏,被其他进程使用等)SQLiteConnection conn = DBConnection.OpenDB();.

当然,我可以尝试在我的方法中调用File.Exists,但这似乎不是一个合适的解决方案.有帮助吗?



1> Stephen Jenn..:

至少在System.Data.SQLite中,您可以FailIfMissing=True在连接字符串中添加" ". 如果数据库文件不存在,SQLiteConnection.Open()将抛出一个SQLiteException.

string ConnectString = "Data Source=file.sdb; FailIfMissing=True";
DbConnection db = new SQLiteConnection(ConnectString);
db.Open(); // Fails if file.sdb does not exist

有关另一个示例,请参阅SQLite连接字符串示例,查找"禁用创建数据库行为".

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有