【问题标题】:SQLite Stores characters as strings?SQLite 将字符存储为字符串?
【发布时间】:2015-08-05 04:44:38
【问题描述】:

我正在使用 System.Data.SQLite ADO.Net Provider 与 SQLite DB 进行交互。我使用以下语法创建了一个新表:

CREATE TABLE [tb_Replace] ([Character] CHAR(1), [Substitute] CHAR(1))

然后我尝试使用简单的选择来读取数据:

public static List<char> GetReplaceableCharacters(string connectionString)
{
    List<char> replaceableCharacters = new List<char>();
    SQLiteConnection sqlConnection = new SQLiteConnection(connectionString);
    sqlConnection.Open();
    using (SQLiteTransaction transaction = sqlConnection.BeginTransaction())
    {
        SQLiteCommand command = new SQLiteCommand(@"SELECT Character FROM tb_Replace", sqlConnection);
        SQLiteDataReader reader = command.ExecuteReader();
        while (reader.Read())
            replaceableCharacters.Add((char)reader["Character"]);
    }
    sqlConnection.Close();
    return replaceableCharacters;
}

但是,当我这样做时,它引发了 InvalidCastException。但是,如果我将返回类型更改为 aList&lt;string&gt; 并将 reader["Character"] 转换为字符串,它就可以工作。有谁知道为什么会这样?

【问题讨论】:

  • Taylor Well, string is IEnumerable&lt;char&gt; 例如可以声明如下内容`List&lt;char&gt; someChars = new List&lt;char&gt;(); var someCharArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToList(); 然后将其应用于您的示例希望这可以让您了解如何使用List&lt;char&gt;如果您显示 SQL Select 语句返回的示例可能会有所帮助,以便我们可以看到数据的样子..谢谢

标签: c# sqlite


【解决方案1】:

请阅读http://www.sqlite.org/datatype3.html

Sqlite 有五种类型关联(类型首选表的列)和五种存储类(可能的实际值类型)。其中没有CHARACTER类型。

Sqlite 允许您将 anything 指定为创建列的类型。但它不强制除INTEGER PRIMARY KEY 列之外的所有类型。它识别出声明类型名称的几个子字符串来确定列类型亲和性,因此CHARACTERCHARCOALCONTEXTUALIZABLE 都只是TEXT 的一种有趣的写法。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 2018-11-29
    • 2010-10-20
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多