C#でデータベースからデータを取得する方法は?[複製]

Jan 17 2021

sqliteデータベースからデータを取得する必要がありますが、次のエラーが発生します:

System.InvalidCastException: '指定されたキャストは無効です。'

データの種類を悪い方法で変更していますか?

conn.Open();
string stm = new CustomQueries().GetUsersByName(this.searchedName, this.searchedSurname);

SQLiteCommand cmd = new SQLiteCommand(stm, conn);
SQLiteDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    this.personResults.Add(new Person(
                    (int)rdr["Id"],
                    (int)rdr["School_id"],
                    (int)rdr["Role_id"],
                    (string)rdr["Name"],
                    (string)rdr["Surname"],
                    (int)rdr["Study_year"],
                    (string)rdr["Identification_number"],
                    (string)rdr["Address"],
                    (string)rdr["Phone"],
                    (string)rdr["Email"],
                    (int)rdr["Age"],
                    (string)rdr["Birth_date"],
                    (string)rdr["Year_letter"]
                    ));
}

conn.Close();

私のデータベース構造は、コードのフィールドと同じです。列はタイプTextまたはintデータベース内にあります-これも()のタイプと同じです

編集>クエリ:

 public string GetUsersByName(string name, string surname)
        {
            return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
        }

DBユーザーテーブルの構造

回答

MD.RAKIBHASAN Jan 17 2021 at 17:58

キャスト演算子を使用して、値またはオブジェクトを文字列表現に変換しようとしています。プログラムを実行すると、「System.InvalidCastException:タイプ「System.Int32」のオブジェクトをタイプ「System.String」にキャストできません」というメッセージが表示されます。

ToString()メソッドはObjectクラスによって定義されるため、すべての管理対象タイプによって継承またはオーバーライドされます。したがって、ここではToStringメソッドを呼び出します。これは、任意のタイプのインスタンスを文字列表現に正常に変換するためです。

(int)rdr ["Id"]これが問題です。Convert.ToInt32(rdr ["Id"])を使用して問題を修正できます。