ADO.NET 메타데이터를 검색하기 위한 두 가지 API가 있습니다. 하나는 쿼리 결과에 대한 메타데이터를 검색합니다. 다른 하나는 데이터베이스 스키마에 대한 메타데이터를 검색합니다.
쿼리 결과 메타데이터
GetSchemaTable 메서드를 사용하여 SqliteDataReader에서 쿼리 결과의 메타데이터를 검색할 수 있습니다. 반환 DataTable 된 열에는 다음 열이 포함됩니다.
| 칼럼 | 유형 | 설명 |
|---|---|---|
AllowDBNull |
불리언 (Boolean) | 원본 열이 NULL일 수 있으면 True입니다. |
BaseCatalogName |
문자열 | 원본 열 데이터베이스의 이름입니다. 식 표현은 항상 NULL입니다. |
BaseColumnName |
문자열 | 원본 열의 별칭이 없는 이름입니다. 식 표현은 항상 NULL입니다. |
BaseSchemaName |
문자열 | 항상 NULL입니다. SQLite는 스키마를 지원하지 않습니다. |
BaseServerName |
문자열 | 연결 문자열에 지정된 데이터베이스 파일의 경로입니다. |
BaseTableName |
문자열 | 원본 열이 속한 테이블의 이름입니다. 식 표현은 항상 NULL입니다. |
ColumnName |
문자열 | 결과 집합에 있는 열의 이름 또는 별칭입니다. |
ColumnOrdinal |
Int32 | 결과 집합에 있는 열의 서수입니다. |
ColumnSize |
Int32 | 항상 -1. 이는 이후 버전의 Microsoft.Data.Sqlite.에서 변경될 수 있습니다. |
DataType |
유형 | 열의 기본 .NET 데이터 형식입니다. |
DataTypeName |
문자열 | 열의 SQLite 데이터 형식입니다. |
IsAliased |
불리언 (Boolean) | 열 이름이 결과 집합에서 별칭으로 지정된 경우 True입니다. |
IsAutoIncrement |
불리언 (Boolean) | 원본 열이 AUTOINCREMENT 키워드를 사용하여 만들어진 경우 True입니다. |
IsExpression |
불리언 (Boolean) | 열이 쿼리의 식에서 유래하는 경우 True입니다. |
IsKey |
불리언 (Boolean) | 원본 열이 기본 키의 일부이면 True입니다. |
IsUnique |
불리언 (Boolean) | 원본 열이 UNIQUE이면 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 테이블과 table_info 및 foreign_key_list와 같은 PRAGMA 문을 사용하여 스키마 정보를 직접 쿼리할 수 있습니다.
예를 들어 이 쿼리는 데이터베이스의 모든 열에 대한 메타데이터를 검색합니다.
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';
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET