Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada dua API untuk mengambil metadata di ADO.NET. Seseorang mengambil metadata mengenai hasil kueri. Metadata tentang skema basis data diambil oleh yang lain.
Metadata hasil kueri
Anda dapat mengambil metadata tentang hasil kueri menggunakan GetSchemaTable metode pada SqliteDataReader. Yang dikembalikan DataTable berisi kolom berikut:
| kolom | Tipe | Deskripsi |
|---|---|---|
AllowDBNull |
Boolean | True jika kolom asal mungkin NULL. |
BaseCatalogName |
string | Nama database kolom asal. Selalu bernilai NULL untuk semua ekspresi. |
BaseColumnName |
string | Nama kolom asal yang tidak dialihkan. Selalu bernilai NULL untuk semua ekspresi. |
BaseSchemaName |
string | Selalu NULL. SQLite tidak mendukung skema. |
BaseServerName |
string | Jalur ke file database yang ditentukan dalam string koneksi. |
BaseTableName |
string | Nama tabel dari kolom asal. Selalu bernilai NULL untuk semua ekspresi. |
ColumnName |
string | Nama atau alias kolom dalam tataan hasil. |
ColumnOrdinal |
Int32 | Ordinal kolom dalam tataan hasil. |
ColumnSize |
Int32 | Selalu -1. Ini dapat berubah dalam versi yang akan datang dari Microsoft.Data.Sqlite. |
DataType |
Tipe | Jenis data .NET yang default pada kolom. |
DataTypeName |
string | Jenis data SQLite dari kolom. |
IsAliased |
Boolean | True jika nama kolom diberi alias dalam tataan hasil. |
IsAutoIncrement |
Boolean | True jika kolom asal dibuat dengan kata kunci AUTOINCREMENT. |
IsExpression |
Boolean | Benar jika kolom berasal dari ekspresi dalam pernyataan. |
IsKey |
Boolean | True jika kolom asal adalah bagian dari KUNCI PRIMER. |
IsUnique |
Boolean | True jika kolom asal UNIK. |
NumericPrecision |
Int16 | Selalu NULL. Ini dapat berubah dalam versi yang akan datang dari Microsoft.Data.Sqlite. |
NumericScale |
Int16 | Selalu NULL. Ini dapat berubah dalam versi yang akan datang dari Microsoft.Data.Sqlite. |
Contoh berikut menunjukkan cara menggunakan GetSchemaTable untuk membuat string debug yang memperlihatkan metadata tentang hasil:
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();
Misalnya, kueri ini akan menghasilkan string debug berikut:
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
Skema metadata
Microsoft.Data.Sqlite tidak menerapkan metode GetSchema pada DbConnection. Sebagai gantinya, Anda dapat meminta informasi skema secara langsung menggunakan tabel sqlite_master dan pernyataan PRAGMA seperti table_info dan foreign_key_list.
Misalnya, kueri ini akan mengambil metadata tentang semua kolom dalam database.
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';