Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取表架构不需要';似乎无法使用System.Data.SQLite_C#_Sqlite_System.data.sqlite - Fatal编程技术网

C# 获取表架构不需要';似乎无法使用System.Data.SQLite

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 }); 问题是,虽然我确实得到

我正在使用SQLite.NET访问我的数据库,在一个特定的情况下,我需要获取一个表模式,因为它是特定于应用程序的

我一直在浏览SQLite.NET论坛和谷歌,这看起来非常简单。如果我有一个名为MYTABLE的表,我应该能够做到:

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引擎。:)为什么你认为这些结果出乎意料?(请求表的)每列一行,每行都有上述所有列,这些列在(请求表的)每列的各种设置上展开。