2011-01-28 9 views
1
System.InvalidCastException = "Specified cast is not valid." 

これはエラーです。SQLiteからレコードを取得しようとするとかなり簡単なグリッチが発生する

私のコードは十分に簡単です:

public Staff FindStaff(int id) 
{ 
    try 
    { 
     return db.Staffs.SingleOrDefault(c => c.ID == id); 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine(e.InnerException); 
     throw; 
    }    
} 

私は、「ID」パラメータは、実行時に持っているどのような値をチェックするためにブレークポイントを使用している、そしてそれは、既存のレコードの数値を持っています。たとえば、4

returnステートメントでエラーが発生します。

私のプロジェクトでは、別のエンティティのコードと同じタイプのコードがあり、正常に動作します。このエラーの原因は何ですか?

テーブルを作成するために使用したTSQLは次のとおりです。スタッフがエラーの原因になっています。学生は100%正常に動作します。

create table Student 
(
    ID integer primary key autoincrement, 
    ...other fields... 
); 

create table Staff 
(
    ID integer primary key autoincrement, 
    IDStaffType integer references StaffType(ID), 
    ...other fields... 
); 

ご覧のとおり、両方のIDフィールドは整数ですが、なぜ変換例外が発生するのですか?

+0

コールスタックの抜粋が役立ちます。 –

答えて

0

SQLiteでは、「整数」は64ビットのintで、C#のlongです。

私はそれが問題ではないと思う。 SQLiteはデータ型(integer primary key列を除く)を強制しないので、例えば整数列に格納された文字列を持つレコードを持つ可能性があります。これは時にはうまくいくが、しばしば(問題の記録だけがエラーを引き起こす)奇妙な動作を説明するだろう。

このシナリオに自分自身を実行した後、私は、常に例えば文字列としてSQLiteのデータを処理するために、私のEDMXファイルを変更したDefiningQuery挿入/更新/削除「ストアドプロシージャを」一致する

SELECT RowId, 
CAST ([data1] AS TEXT) AS [data1], 
CAST ([data2] AS TEXT) AS [data2], 
CAST ([data3] AS TEXT) AS [data3] 
FROM table1 

の定義されましたStorageModelsにあります。

+0

私の質問に答える時間を取ってくれてありがとう。エラーが発生すると、私は正確に絞り込んだ:http://www.dreamincode.net/forums/topic/212505-pretty-simple-glitch-firing-when-trying-to-get-a-records-from-sqlite/page__p__1233134__fromsearch__1&#entry1233134 –

関連する問題