C# 获取表架构不需要';似乎无法使用System.Data.SQLite
我正在使用SQLite.NET访问我的数据库,在一个特定的情况下,我需要获取一个表模式,因为它是特定于应用程序的 我一直在浏览SQLite.NET论坛和谷歌,这看起来非常简单。如果我有一个名为MYTABLE的表,我应该能够做到:C# 获取表架构不需要';似乎无法使用System.Data.SQLite,c#,sqlite,system.data.sqlite,C#,Sqlite,System.data.sqlite,我正在使用SQLite.NET访问我的数据库,在一个特定的情况下,我需要获取一个表模式,因为它是特定于应用程序的 我一直在浏览SQLite.NET论坛和谷歌,这看起来非常简单。如果我有一个名为MYTABLE的表,我应该能够做到: DataTable dt = Connection.GetSchema( SQLiteMetaDataCollectionNames.Columns, new string[] { null, null, "MYTABLE", null }); 问题是,虽然我确实得到
DataTable dt = Connection.GetSchema( SQLiteMetaDataCollectionNames.Columns, new string[] { null, null, "MYTABLE", null });
问题是,虽然我确实得到了一个数据表,但它包含了所有错误的信息。具体来说,这就是我从MYTABLE的假定列中得到的结果:
- [0]{TABLE_CATALOG}对象{System.Data.DataColumn}
- [1] {TABLE_SCHEMA}对象{System.Data.DataColumn}
- [2] {TABLE_NAME}对象{System.Data.DataColumn}
- [3] {COLUMN_NAME}对象{System.Data.DataColumn}
- [4] {COLUMN_GUID}对象{System.Data.DataColumn}
- [5] {COLUMN_PROPID}对象{System.Data.DataColumn}
- [6] {ORDINAL_POSITION}对象{System.Data.DataColumn}
- [7] {COLUMN_HASDEFAULT}对象{System.Data.DataColumn}
- [8] {COLUMN_DEFAULT}对象{System.Data.DataColumn}
- [9] {COLUMN_FLAGS}对象{System.Data.DataColumn}
- [10] {IS_NULLABLE}对象{System.Data.DataColumn}
- [11] {DATA_TYPE}对象{System.DATA.DataColumn}
- [12] {TYPE_GUID}对象{System.Data.DataColumn}
- [13] {CHARACTER_MAXIMUM_LENGTH}对象{System.Data.DataColumn}
- [14] {CHARACTER_OCTET_LENGTH}对象{System.Data.DataColumn}
- [15] {NUMERIC_PRECISION}对象{System.Data.DataColumn}
- [16] {NUMERIC_SCALE}对象{System.Data.DataColumn}
- [17] {DATETIME_PRECISION}对象{System.Data.DataColumn}
- [18] {CHARACTER\u SET\u CATALOG}对象{System.Data.DataColumn}
- [19] {CHARACTER\u SET\u SCHEMA}对象{System.Data.DataColumn}
- [20] {CHARACTER\u SET\u NAME}对象{System.Data.DataColumn}
- [21]{COLLATION_CATALOG}对象{System.Data.DataColumn}
- [22]{COLLATION_SCHEMA}对象{System.Data.DataColumn}
- [23]{COLLATION_NAME}对象{System.Data.DataColumn}
- [24]{DOMAIN_CATALOG}对象{System.Data.DataColumn}
- [25]{DOMAIN_NAME}对象{System.Data.DataColumn}
- [26]{DESCRIPTION}对象{System.Data.DataColumn}
- [27]{PRIMARY_KEY}对象{System.Data.DataColumn}
- [28]{EDM_TYPE}对象{System.Data.DataColumn}
- [29]{AUTOINCREMENT}对象{System.Data.DataColumn}
- [30]{UNIQUE}对象{System.Data.DataColumn}
有人能告诉我我做错了什么吗 很有可能
SQLiteConnection.GetSchema
被破坏;大多数程序不需要此功能
你可以通过执行一个命令来得到你所需要的;您应该获得一个数据读取器,每列一行。下面是一个示例,说明如何使用建议的检查指定表中是否存在指定列
/// <summary>
/// Checks if the given table contains a column with the given name.
/// </summary>
/// <param name="tableName">The table in this database to check.</param>
/// <param name="columnName">The column in the given table to look for.</param>
/// <param name="connection">The SQLiteConnection for this database.</param>
/// <returns>True if the given table contains a column with the given name.</returns>
public static bool ColumnExists(string tableName, string columnName, SQLiteConnection connection)
{
var cmd = new SQLiteCommand("PRAGMA table_info(" + tableName + ")", connection);
var dr = cmd.ExecuteReader();
while (dr.Read())//loop through the various columns and their info
{
var value = dr.GetValue(1);//column 1 from the result contains the column names
if (columnName.Equals(value))
{
dr.Close();
return true;
}
}
dr.Close();
return false;
}
//
///检查给定表是否包含具有给定名称的列。
///
///此数据库中要检查的表。
///给定表中要查找的列。
///此数据库的SQLiteConnection。
///如果给定表包含具有给定名称的列,则为True。
公共静态bool ColumnExists(string tableName、string columnName、SQLiteConnection)
{
var cmd=new SQLiteCommand(“PRAGMA table_info(“+tableName+”),连接);
var dr=cmd.ExecuteReader();
while(dr.Read())//遍历各个列及其信息
{
var value=dr.GetValue(1);//结果中的第1列包含列名
if(columnName.Equals(value))
{
Close博士();
返回true;
}
}
Close博士();
返回false;
}
非常好的提示,非常感谢。现在很高兴认识到SQLite命令只是直接传递给SQLite引擎。:)为什么你认为这些结果出乎意料?(请求表的)每列一行,每行都有上述所有列,这些列在(请求表的)每列的各种设置上展开。