【问题标题】:SQLite.NET Check if column exists in tableSQLite.NET 检查表中是否存在列
【发布时间】:2015-03-27 05:12:12
【问题描述】:

我创建了以下在现有 SQLite 表中添加列的方法

public async void AddColumnMyNewColumn()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    await conn.ExecuteAsync("ALTER TABLE MyTable ADD COLUMN MyNewColumn bit DEFAULT 'False';");
}

它在 MyTable 中创建一个新列 MyNewColumn。

下次调用 AddColumnMyNewColumn 方法时,会抛出错误。

如何检查此列是否已创建?

我已经检查过thisthis,但我不能把这些东西放在一起得到这样的东西..

public async void AddColumnMyNewColumn()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    bool columnExists;

    //Check if column exists & set columnExists accordingly

    if(!columnExists)
        await conn.ExecuteAsync("ALTER TABLE MyTable ADD COLUMN MyNewColumn bit DEFAULT 'False';");
}

【问题讨论】:

    标签: c# sqlite windows-runtime sqlite.net


    【解决方案1】:

    解决方案 1. 使用 SQLite.Net

    您使用的是 SQLite.Net,所以您的表映射到 C# 类,对吧?

    如果你向你的 C# 类添加一个属性,你可以调用它

    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); 
    
    await conn.CreateTableAsync<MyTableClass>();
    

    并且您的新属性将作为列添加到您的表格中,所有以前的数据都不会更改

    解决方案 2. 使用查询

    (列出表格的所有列)然后您可以手动添加列)

    SQLite Schema Information Metadata

    【讨论】:

    • 不错的答案。我还有一个同样的问题。请在此处查看stackoverflow.com/questions/28208685/…
    • 如果重命名现有列并执行 createtableasync 方法会发生什么?这会创建一个新列并保留旧列还是更新列的名称?如果您更改现有列的类型,甚至同样的问题?
    【解决方案2】:

    使用 SQLite.net 很容易知道列是否存在,以防万一你真的需要它:

    var tableInfo = connection.GetTableInfo("YourTable");
    var columnExists = tableInfo.Any(x => x.Name.Equals("ColumnName"));
    

    但如前所述,connection.CreateTable&lt;T&gt;()connection.CreateTableAsync&lt;T&gt;() 将为您添加新列,因此您无需执行 sql 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2017-09-28
      • 2013-08-07
      • 2021-12-17
      • 2018-06-19
      相关资源
      最近更新 更多