2011-08-10 12 views
3

フィールドタイプはお金ですが、私はこのエラーを取得する:Sqliteを - エラー:私は「0」またはフィールドに「1」を置けば「指定されたキャストは有効ではありません」

System.Reflection.TargetInvocationException: 

Exception has been thrown by the target of an invocation. ---> 
System.InvalidCastException: Specified cast is not valid. 

at System.Data.SQLite.SQLiteDataReader.VerifyType(Int32 i, DbType typ) 
at System.Data.SQLite.SQLiteDataReader.GetBoolean(Int32 i) 

--- End of inner exception stack trace --- 

これは、モデルデザイナーからです:エラーを取得する

<Property Name="Amount" Type="decimal" Precision="53" /> 

====

<EdmScalarPropertyAttribute(EntityKeyProperty:=False, IsNullable:=True)> 
<DataMemberAttribute()> 
Public Property Amount() As Nullable(Of Global.System.Decimal) 
    Get 
     Return _Amount 
    End Get 
    Set(ByVal value As Nullable(Of Global.System.Decimal)) 
     OnAmountChanging(Value) 
     ReportPropertyChanging("Amount") 
     _Amount = StructuralObject.SetValidValue(value) 
     ReportPropertyChanged("Amount") 
     OnAmountChanged() 
    End Set 
End Property 

Private _Amount As Nullable(Of Global.System.Decimal) 
Private Partial Sub OnAmountChanging(value As Nullable(Of Global.System.Decimal)) 
End Sub 

Private Partial Sub OnAmountChanged() 
End Sub 

コード:

Dim Query = From c In EnData.Transactions Where c.TranID = 660 ' this tran is the amount 0 

     For Each tran In Query 'Error here 

     Next 
+0

私たちにコードを教えてください。 –

+0

私はいくつかのコードを追加しました、これはあなたの探しているものですか? – Ezi

+0

金額を設定しているコードを表示できますか? – arviman

答えて

4

私は問題を抱えています...その量フィールドではありません。ビットタイプである他の列は、虚偽または真実を書いたやり方を好まないことがあります。問題の原因となります。

解決策は、trueを1、falseを0にすることです。これは常にOKです。

+1

EF 6.02とSQLite 1.0.91を使っていますが、これはまだ起こっています。そのために1日だけ無駄になりました。どうもありがとう!!!! – Aymen

0

Microsoft SQL Server用のSQLを記述します。次の例がSqLiteに対して無効である場合は、お知らせください。この回答を削除します。

質問:説明:StructuralObject.SetValidValue(value)?これはカスタム機能ですか?もしそうなら、それを定義できますか?おそらく、次のヘルプ行うにはVBのコードを変更する

:通常

Public Property Amount() As System.Decimal 
    Get 
     Return _Amount 
    End Get 
    Set(ByVal value As Global.System.Decimal) 
     OnAmountChanging(Value) 
     ReportPropertyChanging("Amount") 
     If value = 0 Then 
      _Amount = 0.00M 
     Else If value = 1 Then 
      _Amount = 1.00M 
     Else 
      _Amount = StructuralObject.SetValidValue(value) 
     End If 
     ReportPropertyChanged("Amount") 
     OnAmountChanged() 
    End Set 
End Property 

は、私が一番上に「最も真」の場合を置くことを好むが、私のVBのスキルはそれほど良いものではありません。

こちらがお役に立てば幸いです。

+0

これは自動的に生成されるコードです。ここにはNullの問題はありません。 – Ezi

+0

@Ezi:1と0をテストするコードを更新しました。おそらく 'SQLite'または' SetValidValue'は入力を 'Integer'または' Boolean'として解釈しています。上記の値は、1と0を強制的に2倍にします(金額はM)。 – jp2code

+0

お手数をおかけしていただきありがとうございます。質問の編集をご覧ください。私は問題がどこにあるかを見つけました。 – Ezi

関連する問題