以下示例显示如何使用 GetSchemaTable 创建显示有关结果的元数据的调试字符串:

var builder = new StringBuilder();
var schemaTable = reader.GetSchemaTable();
foreach (DataRow column in schemaTable.Rows)
    if ((bool)column[SchemaTableColumn.IsExpression])
        builder.Append("(expression)");
        builder.Append(column[SchemaTableColumn.BaseTableName])
               .Append(".")
               .Append(column[SchemaTableColumn.BaseColumnName]);
    builder.Append(" ");
    if ((bool)column[SchemaTableColumn.IsAliased])
        builder.Append("AS ")
               .Append(column[SchemaTableColumn.ColumnName])
               .Append(" ");
    builder.Append(column["DataTypeName"])
           .Append(" ");
    if (column[SchemaTableColumn.AllowDBNull] as bool? == false)
        builder.Append("NOT NULL ");
    if (column[SchemaTableColumn.IsKey] as bool? == true)
        builder.Append("PRIMARY KEY ");
    if (column[SchemaTableOptionalColumn.IsAutoIncrement] as bool? == true)
        builder.Append("AUTOINCREMENT ");
    if (column[SchemaTableColumn.IsUnique] as bool? == true)
        builder.Append("UNIQUE ");
    builder.AppendLine();
var debugString = builder.ToString();

例如,此查询将产生以下调试字符串:

SELECT id AS post_id,
       title,
       body,
       random() AS random
FROM post
post.id AS post_id INTEGER PRIMARY KEY AUTOINCREMENT
post.title TEXT NOT NULL UNIQUE
post.body TEXT
(expression) AS random BLOB

架构元数据

Microsoft.Data.Sqlite 未在 DbConnection 上实现 GetSchema 方法。 相反,可以使用 sqlite_master 表和 PRAGMA 语句(如 table_infoforeign_key_list)直接查询架构信息。

例如,此查询将检索数据库中所有列的元数据。

SELECT t.name AS tbl_name, c.name, c.type, c.notnull, c.dflt_value, c.pk
FROM sqlite_master AS t,
     pragma_table_info(t.name) AS c
WHERE t.type = 'table';
  • SQL 数据库架构的存储
  • PRAGMA 语句
  •