培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
提供两种用于检索 ADO.NET 中元数据的 API。 一个检索有关查询结果的元数据。 另一个检索有关数据库架构的元数据。
可以及使用 SqliteDataReader
上的 GetSchemaTable 方法检索有关查询结果的元数据。 返回的 DataTable 包含以下列:
列 | 类型 | 说明 |
---|---|---|
AllowDBNull |
Boolean | 如果原点列可以为 NULL,则为 True。 |
BaseCatalogName |
String | 原点列的数据库的名称。 表达式始终为 NULL。 |
BaseColumnName |
String | 原点列的真实名称。 表达式始终为 NULL。 |
BaseSchemaName |
String | 始终为 NULL。 SQLite 不支持架构。 |
BaseServerName |
String | 在连接字符串中指定的数据库文件的路径。 |
BaseTableName |
String | 原点列的表的名称。 表达式始终为 NULL。 |
ColumnName |
String | 结果集中列的名称或别名。 |
ColumnOrdinal |
Int32 | 结果集中列的序号。 |
ColumnSize |
Int32 | 始终为 -1。 在将来的 Microsoft.Data.Sqlite 版本中这可能会发生变化。 |
DataType |
类型 | 列的默认 .NET 数据类型。 |
DataTypeName |
String | 列的 SQLite 数据类型。 |
IsAliased |
Boolean | 如果列名在结果集中具有别名,则为 True。 |
IsAutoIncrement |
Boolean | 如果原点列是使用 AUTOINCREMENT 关键字创建的,则为 True。 |
IsExpression |
Boolean | 如果列源自查询中的表达式,则为 True。 |
IsKey |
Boolean | 如果原点列是主键的一部分,则为 True。 |
IsUnique |
Boolean | 如果原点列是唯一的,则为 True。 |
NumericPrecision |
Int16 | 始终为 NULL。 在将来的 Microsoft.Data.Sqlite 版本中这可能会发生变化。 |
NumericScale |
Int16 | 始终为 NULL。 在将来的 Microsoft.Data.Sqlite 版本中这可能会发生变化。 |
以下示例显示如何使用 GetSchemaTable
创建显示有关结果的元数据的调试字符串:
var builder = new StringBuilder();
var schemaTable = reader.GetSchemaTable();
foreach (DataRow column in schemaTable.Rows)
{
if ((bool)column[SchemaTableColumn.IsExpression])
{
builder.Append("(expression)");
}
else
{
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_info 和 foreign_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';
培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
文档
了解如何在单个命令中执行一批 SQL 语句。
介绍库如何处理数据库错误和重试。
了解如何使用 SQL 参数。