2011-08-10 6 views
3

필드 유형 "지정한 캐스트가 잘못되었습니다"은 돈이다 '0'또는 '1'현장에서이 오류가 얻을 :SQLite는 - 오류 : 내가 넣을 경우

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 

코드 :

01이 모델 디자이너에서입니다
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

금액을 설정하는 코드를 Google에 표시 할 수 있습니까? – arviman

답변

4

나는 문제가있어 ... 그 금액 필드가 아닙니다. 약간의 타입 인 다른 컬럼은, 내가 거짓 또는 진실을 쓴 방식을 좋아하지 않을 때가있다. 문제의 원인이됩니다.

해결 방법은 true를 1, false를 0으로 사용하는 것입니다. 항상 괜찮습니다.

+1

EF 6.02와 SQLite 1.0.91을 사용하여 이것은 여전히 ​​일어나고 있으며 하루 만 낭비되고 있습니다. 고마워요 !!!! – Aymen

0

Microsoft SQL Server 용 SQL을 작성합니다. 다음 예제가 SqLite에 유효하지 않은 경우 알려 주시면 답변을 삭제하겠습니다.

질문 : 무엇입니까 : StructuralObject.SetValidValue(value)? 이것은 사용자 정의 함수입니까? 그렇다면 그것을 정의 할 수 있습니까?

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 기술은 매우 좋지 않다 :

는 아마도 다음과 같은 도움을 당신의 VB 코드를 수정.

이 정보가 도움이되기를 바랍니다.

+0

이것은 자동으로 생성 된 코드입니다. 여기에 Null 문제가 없습니다. – Ezi

+0

@Ezi : 1과 0을 테스트하는 코드를 업데이트했습니다. 아마도'SQLite' 또는'SetValidValue'는 입력을 'Integer' 또는'Boolean'으로 해석하고 있습니다. 위에 표시된 값은 1과 0을 두 배로 강제합니다 (Money의 경우 M). – jp2code

+0

도움을 주셔서 감사합니다. 질문의 편집을 참조하십시오. 문제가있는 곳을 찾았습니다. – Ezi

관련 문제