3

我正在使用 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<string>reader["Character"]转换为字符串,它就可以工作。有谁知道为什么会这样?

4

1 回答 1

4

只需阅读http://www.sqlite.org/datatype3.html

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

Sqlite 允许您指定几乎任何内容作为列创建的类型。但它并不强制除INTEGER PRIMARY KEY列之外的所有内容的类型。它识别一些声明类型名称的子字符串来确定列类型亲和性,因此,CHARACTER所有这些都只是一种有趣的写作方式。CHARCOALCONTEXTUALIZABLETEXT

于 2013-01-26T14:28:07.990 回答