Aracılığıyla paylaş


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 GetSchemaTableyöntemini kullanarak SqliteDataReader bir sorgunun sonuçlarıyla ilgili meta verileri alabilirsiniz. Dönen DataTable aşağıdaki sütunları içerir:

Köşe yazısı Türü Açıklama
AllowDBNull Boolean (Boole Mantığı) Kaynak sütun NULL olabilirse true.
BaseCatalogName Dize Kaynak sütunun veritabanının adı. İfadeler için her zaman NULL.
BaseColumnName Dize Kaynak sütunun unalıyasız adı. İfadeler için her zaman NULL.
BaseSchemaName Dize Her zaman NULL. SQLite şemaları desteklemez.
BaseServerName Dize Bağlantı dizesinde belirtilen veritabanı dosyasının yolu.
BaseTableName Dize Kaynak sütun tablosunun adı. İfadeler için her zaman NULL.
ColumnName Dize Sonuç kümesindeki sütunun adı veya diğer adı.
ColumnOrdinal Int32 Sonuç kümesindeki sütunun sıra numarası.
ColumnSize Int32 Her zaman -1. Bu, uygulamasının Microsoft.Data.Sqlitegelecek sürümlerinde değişebilir.
DataType Türü Sütunun varsayılan .NET veri türü.
DataTypeName Dize Kolonun SQLite SQL veri türü.
IsAliased Boolean (Boole Mantığı) Sütun adı sonuç kümesinde diğer adla adlandırıldıysa True.
IsAutoIncrement Boolean (Boole Mantığı) Kaynak sütun AUTOINCREMENT anahtar sözcüğüyle oluşturulduysa true.
IsExpression Boolean (Boole Mantığı) Sütun, sorgudaki bir ifadeden geliyorsa doğru olur.
IsKey Boolean (Boole Mantığı) Kaynak sütun, BİRİnCİL ANAHTAR'ın bir parçasıysa, doğru.
IsUnique Boolean (Boole Mantığı) Kaynak sütun UNIQUE ise True.
NumericPrecision Int16 Her zaman NULL. Bu, uygulamasının Microsoft.Data.Sqlitegelecek sürümlerinde değişebilir.
NumericScale Int16 Her zaman NULL. Bu, uygulamasının Microsoft.Data.Sqlitegelecek 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, DbConnection ü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';

Ayrıca bakınız