Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Két API van az ADO.NET-ben a metaadatok lekérésére. Az egyik lekéri a lekérdezési eredmények metaadatait. A másik az adatbázisséma metaadatait kéri le.
Lekérdezés eredményének metaadatai
A lekérdezés eredményeire vonatkozó metaadatokat a GetSchemaTable következő metódussal SqliteDataReaderkérdezheti le: . A visszaadott DataTable oszlop a következő oszlopokat tartalmazza:
| oszlop | Típus | Leírás |
|---|---|---|
AllowDBNull |
logikai | Igaz, ha a forrásoszlop null értékű lehet. |
BaseCatalogName |
Lánc | A forrásoszlop adatbázisának neve. A kifejezésekhez mindig NULL érték szükséges. |
BaseColumnName |
Lánc | A forrásoszlop közvetlen neve. A kifejezésekhez mindig NULL érték szükséges. |
BaseSchemaName |
Lánc | Mindig NULL. Az SQLite nem támogatja a sémákat. |
BaseServerName |
Lánc | A kapcsolati sztringben megadott adatbázisfájl elérési útja. |
BaseTableName |
Lánc | Az eredet oszlop táblájának neve. A kifejezésekhez mindig NULL érték szükséges. |
ColumnName |
Lánc | Az eredményhalmaz oszlopának neve vagy aliasa. |
ColumnOrdinal |
Int32 | Az oszlop sorszáma az eredményhalmazban. |
ColumnSize |
Int32 | Mindig -1. Ez a későbbi verziókban Microsoft.Data.Sqliteváltozhat. |
DataType |
Típus | Az oszlop alapértelmezett .NET-adattípusa. |
DataTypeName |
Lánc | Az oszlop SQLite adattípusa. |
IsAliased |
logikai | Igaz, ha az oszlop neve aliasként szerepel az eredményhalmazban. |
IsAutoIncrement |
logikai | Igaz, ha a forrásoszlop az AUTOINCREMENT kulcsszóval lett létrehozva. |
IsExpression |
logikai | Igaz, ha az oszlop a lekérdezés egyik kifejezéséből származik. |
IsKey |
logikai | Igaz, ha a forrásoszlop az ELSŐDLEGES KULCS része. |
IsUnique |
logikai | Igaz, ha a forrásoszlop EGYEDI. |
NumericPrecision |
Int16 | Mindig NULL. Ez a későbbi verziókban Microsoft.Data.Sqliteváltozhat. |
NumericScale |
Int16 | Mindig NULL. Ez a későbbi verziókban Microsoft.Data.Sqliteváltozhat. |
Az alábbi példa bemutatja, hogyan hozhat GetSchemaTable létre hibakeresési sztringet, amely az eredmény metaadatait jeleníti meg:
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();
Ez a lekérdezés például a következő hibakeresési sztringet hozza létre:
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
Séma metaadatai
A Microsoft.Data.Sqlite nem implementálja a GetSchema metódust a DbConnectionon. Ehelyett közvetlenül a sémaadatokat kérdezheti le a sqlite_master tábla és a PRAGMA utasítások, például a table_info és a foreign_key_list használatával.
Ez a lekérdezés például lekéri az adatbázis összes oszlopának metaadatait.
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';