2017-05-20 10 views
0

私はsqliteテーブルからデータを取得しようとしており、それを1として使用しています。 これは私が得る例外私のコードInvalidCastException:ソースタイプから宛先タイプにキャストできません。 sqlite

string conn = "URI=file:DB.db"; //Path to database. 
    IDbConnection dbconn; 
    dbconn = (IDbConnection)new SqliteConnection(conn); 
    try 
    { 
     dbconn.Open(); //Open connection to the database. 

    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    IDbCommand dbcmd = dbconn.CreateCommand(); 
    string sqlQuery = "SELECT * FROM mytable WHERE id =" + LevelID + ""; 
    dbcmd.CommandText = sqlQuery; 
    IDataReader reader = null; 
    reader = dbcmd.ExecuteReader(); 

    if (reader != null) 
    { 
     while (reader.Read()) 
     { 
      string question = reader.GetString(0); 
      string cat = reader.GetString(1); 
     } 
     } 

です:

InvalidCastException: Cannot cast from source type to destination type. 
Mono.Data.Sqlite.SqliteDataReader.VerifyType (Int32 i, DbType typ) 
Mono.Data.Sqlite.SqliteDataReader.GetString (Int32 i) 

私はデータベースおよびフィールドをチェックしたが、「TEXT」であり、それに格納されたデータが文字列であると私は宣言していますそれでなぜそれがIntだと言うのですか?

答えて

1

SELECT * FROM mytableを使用しないようにしてください。しかし、あなたが何を選択しているかをもっと明示しようとしてください。たとえば、代わりにこのようなクエリを記述します。

SELECT NameOfColumn1, NameOfColumn2, ... FROM mytable 

を(あなたのテーブルには、より多くの列を持っている場合、それはそれらのすべてを選択します)Select *は、あなたが期待しているだけで2列以上の列を選択することも可能です。したがって、キャスティングは壊れています。

+0

ありがとうございます。私は第3列(文字列)ではなく、第2列(Int)を使用していました。私のコードを 'string cat = reader.GetString(2);に変更します。 '問題を解決しました。 –

関連する問題