3

System.Data.SQLiteADO.Netプロバイダーを使用してSQLiteDBと対話しています。次の構文を使用して、新しいテーブルを作成しました。

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をスローしました。ただし、戻りタイプをaに変更して文字列にList<string>キャストすると、機能します。reader["Character"]なぜこれが起こるのか誰かが知っていますか?

4

1 に答える 1

4

http://www.sqlite.org/datatype3.htmlを読んでください。

Sqliteには、5つのタイプアフィニティ(テーブルの列で優先されるタイプ)と5つのストレージクラス(可能な実際の値タイプ)があります。CHARACTERどちらにもタイプはありません。

Sqliteを使用すると、列を作成するためのタイプとしてほぼすべてを指定できます。ただし、INTEGER PRIMARY KEY列以外のすべてに型を強制するわけではありません。宣言された型名のいくつかのサブストリングを認識して、列型の親和性を決定します。したがってCHARACTER、これらはすべてCHARCOALCONTEXTUALIZABLE面白い書き方TEXTです。

于 2013-01-26T14:28:07.990 に答える