4

我正在使用 SQLite.NET 访问我的数据库,在一种特殊情况下,我需要获取一个表模式,因为它是特定于应用程序的。

我一直在浏览 SQLite.NET 论坛和谷歌,看起来很简单。如果我有一个名为 MYTABLE 的表,我应该可以这样做:

DataTable dt = Connection.GetSchema( SQLiteMetaDataCollectionNames.Columns, new string[] { null, null, "MYTABLE", null });

问题是,虽然我确实得到了一个 DataTable,但其中包含所有错误的信息。具体来说,这是我为 MYTABLE 的假定列返回的内容:

  • [0] {TABLE_CATALOG} 对象 {System.Data.DataColumn}
  • [1] {TABLE_SCHEMA} 对象 {System.Data.DataColumn}
  • [2] {TABLE_NAME} 对象 {System.Data.DataColumn}
  • [3] {COLUMN_NAME} 对象 {System.Data.DataColumn}
  • [4] {COLUMN_GUID} 对象 {System.Data.DataColumn}
  • [5] {COLUMN_PROPID} 对象 {System.Data.DataColumn}
  • [6] {ORDINAL_POSITION} 对象 {System.Data.DataColumn}
  • [7] {COLUMN_HASDEFAULT} 对象 {System.Data.DataColumn}
  • [8] {COLUMN_DEFAULT} 对象 {System.Data.DataColumn}
  • [9] {COLUMN_FLAGS} 对象 {System.Data.DataColumn}
  • [10] {IS_NULLABLE} 对象 {System.Data.DataColumn}
  • [11] {DATA_TYPE} 对象 {System.Data.DataColumn}
  • [12] {TYPE_GUID} 对象 {System.Data.DataColumn}
  • [13] {CHARACTER_MAXIMUM_LENGTH} 对象 {System.Data.DataColumn}
  • [14] {CHARACTER_OCTET_LENGTH} 对象 {System.Data.DataColumn}
  • [15] {NUMERIC_PRECISION} 对象 {System.Data.DataColumn}
  • [16] {NUMERIC_SCALE} 对象 {System.Data.DataColumn}
  • [17] {DATETIME_PRECISION} 对象 {System.Data.DataColumn}
  • [18] {CHARACTER_SET_CATALOG} 对象 {System.Data.DataColumn}
  • [19] {CHARACTER_SET_SCHEMA} 对象 {System.Data.DataColumn}
  • [20] {CHARACTER_SET_NAME} 对象 {System.Data.DataColumn}
  • [21] {COLLATION_CATALOG} 对象 {System.Data.DataColumn}
  • [22] {COLLATION_SCHEMA} 对象 {System.Data.DataColumn}
  • [23] {COLLATION_NAME} 对象 {System.Data.DataColumn}
  • [24] {DOMAIN_CATALOG} 对象 {System.Data.DataColumn}
  • [25] {DOMAIN_NAME} 对象 {System.Data.DataColumn}
  • [26] {DESCRIPTION} 对象 {System.Data.DataColumn}
  • [27] {PRIMARY_KEY} 对象 {System.Data.DataColumn}
  • [28] {EDM_TYPE} 对象 {System.Data.DataColumn}
  • [29] {AUTOINCREMENT} 对象 {System.Data.DataColumn}
  • [30] {唯一} 对象 {System.Data.DataColumn}

谁能告诉我我在这里做错了什么?

4

2 回答 2

4

很可能SQLiteConnection.GetSchema坏了;大多数程序不需要此功能。

PRAGMA table_info(MYTABLE)你可以通过执行命令得到你需要的;你应该得到一个数据阅读器,每列有一行。

于 2010-07-16T21:47:17.687 回答
3

这是一个如何使用Stephen ClearyPRAGMA table_info(tableName)建议的示例来检查指定表中是否存在指定列。

/// <summary>
/// Checks if the given table contains a column with the given name.
/// </summary>
/// <param name="tableName">The table in this database to check.</param>
/// <param name="columnName">The column in the given table to look for.</param>
/// <param name="connection">The SQLiteConnection for this database.</param>
/// <returns>True if the given table contains a column with the given name.</returns>
public static bool ColumnExists(string tableName, string columnName, SQLiteConnection connection)
{
    var cmd = new SQLiteCommand("PRAGMA table_info(" + tableName + ")", connection);
    var dr = cmd.ExecuteReader();
    while (dr.Read())//loop through the various columns and their info
    {
        var value = dr.GetValue(1);//column 1 from the result contains the column names
        if (columnName.Equals(value))
        {
            dr.Close();
            return true;
        }
    }

    dr.Close();
    return false;
}
于 2017-07-10T11:14:05.243 回答