【问题标题】:How do I check in SQLite whether a database exists C#如何在 SQLite 中检查数据库是否存在 C#
【发布时间】:2017-10-11 17:21:38
【问题描述】:

我目前正在用 C# 编写一个应用程序,并使用 sqlite 作为嵌入式数据库。 我已经让我的应用程序在启动时创建一个新数据库,但是如何让它检查数据库是否存在?如果它确实存在,我如何让它使用它,如果不存在如何创建一个新数据库?

这是我目前所拥有的:

private void MainWindow_Loaded(object sender, EventArgs e)
{
    SQLiteConnection sqlite_conn;
    SQLiteCommand sqlite_cmd;
    bool newdb = false;
    if (newdb == true)
    {
        sqlite_conn = new SQLiteConnection("DataSource=database.db;Version=3;");
        sqlite_conn.Open();
        MessageBox.Show("31");
    }
    else
    {
        sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;");
        sqlite_conn.Open();    
        sqlite_cmd = sqlite_conn.CreateCommand();    
        sqlite_cmd.CommandText = "CREATE TABLE Client (id integer primary key, Title  varchar(100),Name  varchar(100),Surname  varchar(100),Dateofbirth DateTime , Propertyname varchar(100),Moveindate DateTime,Relationship varchar(100),Spouse  varchar(100),Gender  varchar(100), spTitle  varchar(100),SpouseName  varchar(100),SpouseSurname  varchar(100),spDateofbirth DateTime ,spRelationship varchar(100),spSpouse  varchar(100),spGender  varchar(100));";
        sqlite_cmd.ExecuteNonQuery();
    }    
    sqlite_conn.Close();
    MessageBox.Show("dasdas");    
}

【问题讨论】:

    标签: c# sqlite


    【解决方案1】:

    怎么样:

    if(File.Exists("database.db"))
    

    编辑:更改路径以匹配原始代码中的源代码。

    【讨论】:

    • 从连接字符串,路径应该只是database.db
    • 如果它在 Windows 7 下的 Program Files 中运行,UAC File Redirection 可能是个问题,因为文件不会按预期创建。
    【解决方案2】:
    public async Task<bool> IsDbExists(string fileName)
        {
            try
            {
                var item = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
                var db = new SQLiteConnection(DbHelper.DBPATH);
                var tb1 = db.GetTableInfo("Domain");
                var tb2 = db.GetTableInfo("Account");
                var tb3 = db.GetTableInfo("Product");
                var tb4 = db.GetTableInfo("Review");
                if (item == null || tb1.Count == 0 || tb2.Count == 0 || tb3.Count == 0 || tb4.Count == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
    

    This is one of the solution

    【讨论】:

    • 对我来说,如果执行相同的代码,第三次就会挂起。
    • make 是同步的,它可能不会挂起
    【解决方案3】:
        privat string _dataSource = @"H:\Ik.db";
        private SQLiteConnection _connection;
        private SQLiteCommand _command;
    
        private void connectToSQLite()
        {
            using (SQLiteConnection _connection = new SQLiteConnection())
            {
                if (File.Exists(@"H:\Ik.db"))
                {
                    _connection.ConnectionString = $"Data Source={_dataSource};Version=3";
                    _connection.Open();
                    using (SQLiteCommand _command = new SQLiteCommand())
                    {
                        _command.Connection = _connection;
                        _command.CommandText = "CREATE TABLE IF NOT EXISTS Kunden ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Lastname VARCHAR(100) NOT NULL, " +
                         "name VARCHAR(100) NOT NULL, Code VARCHAR(100) NOT NULL, City VARCHAR(100) NOT NULL);";
                        try
                        {
                            _command.ExecuteNonQuery();
                            MessageBox.Show($"You Connected to local Data Base under {_dataSource} Sucssefuly");
                        }
                        catch (Exception)
                        {
    
                            throw;
                        }
                    }
                }
                else
                {
                    SQLiteConnection.CreateFile(@"H:\Ik.db");
    
                }
            }
        }
    

    【讨论】:

    • 如何检查 SQLite 文件是否存在 C#
    猜你喜欢
    • 2014-04-03
    • 2017-10-21
    • 2017-04-22
    • 2011-03-04
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多