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 SqliteDataReaderyö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.Sqlitegelecek 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.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, 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';

Ayrıca bkz.