Meta Veriler (Sqlite)
ADO.NET meta verileri almak için iki API vardır. Sorgu sonuçlarıyla ilgili meta verileri alır. Diğeri, veritabanı şemasıyla ilgili meta verileri alır.
Sorgu sonucu meta verileri
üzerindeki SqliteDataReader
yöntemini kullanarak GetSchemaTable bir sorgunun sonuçlarıyla ilgili meta verileri alabilirsiniz. Döndürülenler DataTable aşağıdaki sütunları içerir:
Sütun | Türü | Açıklama |
---|---|---|
AllowDBNull |
Boolean | Kaynak sütun NULL olabilirse true. |
BaseCatalogName |
String | Kaynak sütunun veritabanının adı. İfadeler için her zaman NULL. |
BaseColumnName |
String | Kaynak sütunun gereksiz adı. İfadeler için her zaman NULL. |
BaseSchemaName |
String | Her zaman NULL. SQLite şemaları desteklemez. |
BaseServerName |
String | bağlantı dizesi belirtilen veritabanı dosyasının yolu. |
BaseTableName |
String | Kaynak sütun tablosunun adı. İfadeler için her zaman NULL. |
ColumnName |
String | Sonuç kümesindeki sütunun adı veya diğer adı. |
ColumnOrdinal |
Int32 | Sonuç kümesindeki sütunun sıralı değeri. |
ColumnSize |
Int32 | Her zaman -1. Bu, uygulamasının Microsoft.Data.Sqlite gelecek sürümlerinde değişebilir. |
DataType |
Tür | Sütunun varsayılan .NET veri türü. |
DataTypeName |
String | Sütunun SQLite veri türü. |
IsAliased |
Boolean | Sütun adı sonuç kümesinde diğer adla adlandırıldıysa True. |
IsAutoIncrement |
Boolean | Kaynak sütun AUTOINCREMENT anahtar sözcüğüyle oluşturulduysa true. |
IsExpression |
Boolean | Sütun sorgudaki bir ifadeden geliyorsa True. |
IsKey |
Boolean | Kaynak sütun BİRİnCİl ANAHTAR'ın bir parçasıysa true. |
IsUnique |
Boolean | Kaynak sütun UNIQUE ise True. |
NumericPrecision |
Int16 | Her zaman NULL. Bu, uygulamasının Microsoft.Data.Sqlite gelecek sürümlerinde değişebilir. |
NumericScale |
Int16 | Her zaman NULL. Bu, uygulamasının Microsoft.Data.Sqlite gelecek sürümlerinde değişebilir. |
Aşağıdaki örnekte, bir sonuçla ilgili meta verileri gösteren bir hata ayıklama dizesi oluşturmak için nasıl kullanılacağı GetSchemaTable
gösterilmektedir:
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();
Örneğin, bu sorgu aşağıdaki hata ayıklama dizesini üretir:
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
Şema meta verileri
Microsoft.Data.Sqlite, Db Bağlan ion üzerinde GetSchema yöntemini uygulamaz. Bunun yerine, sqlite_master tablosunu ve table_info ve foreign_key_list gibi PRAGMA deyimlerini kullanarak şema bilgilerini doğrudan sorgulayabilirsiniz.
Örneğin, bu sorgu veritabanındaki tüm sütunlar hakkındaki meta verileri alır.
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';