문제

내가 원하는 일부를 생성하는 포맷의 출력 데이터에서 검색 MS-Access 데이터베이스에 저장됩 DataTable 체/가변,myDataTable.그러나 일부의 분야에서 myDataTable cotain 이 변환은 지원 데이터입니다.그래서 다음 VB.net 코드 조각을 줄 것이 차이가 있는 경우의 값이든 필드 lastname, intials, 나 sID이 변환은 지원.

   dim myDataTable as DataTable
   dim tmpStr as String
   dim sID as Integer = 1

   ...
   myDataTable = myTableAdapter.GetData() ' Reads the data from MS-Access table
   ...

   For Each myItem As DataRow In myDataTable.Rows

    tmpStr = nameItem("lastname") + " " + nameItem("initials")

    If myItem("sID")=sID Then
        ' Do something
    End If

    ' print tmpStr

   Next

그래서 어떻게 위의 코드를 작동 할 때 필드가 포함될 수 있습 이 변환은 지원 지 않고도 확인하는 각 경우에는 시간 데이터를 이 변환은 지원으로서 이 질문?

도움이 되었습니까?

해결책

내가 아는 유일한 방법은 그것을 테스트하는 것입니다. 쉽게 만들려면 결합 할 수 있습니다.

If NOT IsDbNull(myItem("sID")) AndAlso myItem("sID") = sId Then
   'Do success
ELSE
   'Failure
End If

나는 당신이 혼합 된 언어를 혼합하더라도 당신이 필요한 것처럼 보이는 VB로 썼습니다.

편집하다

ISDBNULL을 사용하여 더 읽기 쉽게 만들기 위해 청소

다른 팁

이 문제를 다루는 데 지쳤으므로 NotNull () 기능을 썼습니다.

Public Shared Function NotNull(Of T)(ByVal Value As T, ByVal DefaultValue As T) As T
        If Value Is Nothing OrElse IsDBNull(Value) Then
                Return DefaultValue
        Else
                Return Value
        End If
End Function

용법:

If NotNull(myItem("sID"), "") = sID Then
  ' Do something
End If

내 notnull () 함수는 수년에 걸쳐 몇 번의 점검을 거쳤습니다. 제네릭 이전에 나는 단순히 모든 것을 객체로 지정했습니다. 그러나 나는 일반 버전을 선호합니다.

Convert.toString () 및 convert.tointeger () 메소드를 사용하여 DB NULL로 항목을 변환 할 수도 있습니다.

변형 스티브 러프턴 코드, 사용되는 명목상으로 nullable 유형:

Private Shared Function GetNullable(Of T)(dataobj As Object) As T
    If Convert.IsDBNull(dataobj) Then
        Return Nothing
    Else
        Return CType(dataobj, T)
    End If
End Function

예:

mynullable = GetNullable(Of Integer?)(myobj)

할 수 있습 쿼리 mynullable (예를 들어, mynullable.HasValue)

Microsoft 와서 이 변환은 지원합니다.NET1.0 나타내는 데이터베이스 NULL 입니다.그러나 그것은 고통에서 뒤에 사용하기 때문에 만들 수 없습니다 강력한 형식 변수를 저장하는 진정한 값은 null 입니다.Microsoft 종류의 문제를 해결합니다.NET2.0 으로 널 형식입니다.그러나,당신은 여전히 붙어있으로 큰 덩어리의 API 를 사용하는 이 변환은 지원,그리고 그들은 변경할 수 없습니다.

단지 제안,그러나 내가 무슨 일반적으로 하는 이것:

  1. 모든 포함하는 변수 데이터를 읽거나 쓸 데이터베이스를 처리할 수 있어야 합 null 값이 있습니다.에 대한 가치 유형,이미 그들을 만드는 널(T).참고를 위한 형태(문자열과 바이트()),즉 수 있도록 가치를 아무것도 할 수 없습니다.
  2. 쓰의 세트로 변환하는 기능을 다시 사이에"개체를 포함할 수 있는 이 변환은 지원"및"입니다.순이 변수".Wrap 모든 통화를 이 변환은 지원 스 Api 에서 이러한 함수,그런 척 하는 이 변환은 지원이 존재하지 않습니다.

BLL/DAL 설정을 사용하는 경우 DAL의 개체를 읽을 때 IIF를 사용해보십시오.

While reader.Read()
 colDropdownListNames.Add(New DDLItem( _
 CType(reader("rid"), Integer), _
 CType(reader("Item_Status"), String), _
 CType(reader("Text_Show"), String), _
 CType( IIf(IsDBNull(reader("Text_Use")), "", reader("Text_Use")) , String), _
 CType(reader("Text_SystemOnly"), String), _
 CType(reader("Parent_rid"), Integer)))
End While

ISDBNULL 기능을 사용할 수 있습니다.

  If  IsDbNull(myItem("sID")) = False AndAlso myItem("sID")==sID Then
    // Do something
End If

줄이 포함 된 행의 경우 변경할 때와 같이 문자열로 변환 할 수 있습니다.

tmpStr = nameItem("lastname") + " " + nameItem("initials")

에게

tmpStr = myItem("lastname").toString + " " + myItem("intials").toString

비교를 위해 만약에 성명 Myitem ( "Sid") = Sid, 변경해야합니다

myItem("sID").Equals(sID)

그러면 코드는 다음과 같은 런타임 오류없이 실행됩니다. vbnull 데이터.

   VB.Net
   ========
    Dim da As New SqlDataAdapter
    Dim dt As New DataTable
    Call conecDB()        'Connection to Database
    da.SelectCommand = New SqlCommand("select max(RefNo) from BaseData", connDB)

    da.Fill(dt)

    If dt.Rows.Count > 0 And Convert.ToString(dt.Rows(0).Item(0)) = "" Then
        MsgBox("datbase is null")

    ElseIf dt.Rows.Count > 0 And Convert.ToString(dt.Rows(0).Item(0)) <> "" Then
        MsgBox("datbase have value")

    End If

안녕하세요 친구

이것은 Datagrid에서 db null을 확인하고 String으로 변환하는 가장 짧은 방법입니다.

  1. 셀 검증 이벤트를 작성 하고이 코드를 작성하십시오
  2. convert.tostring (dgv.currentcell.value) = ""인 경우
  3. currentCell.Value = ""
  4. 끝 If

이것은 지금까지 변환하는 가장 쉬운 방법 DBNull 문자열로. 속임수는 당신입니다 할 수 없습니다 사용 TRIM 데이터베이스의 필드를 참조 할 때 기능 (내 초기 문제) :

전에 (생성 된 오류 메시지) :

Me.txtProvNum.Text = IIf(Convert.IsDBNull(TRIM(myReader("Prov_Num"))), "", TRIM(myReader("Prov_Num")))

후에 (더 이상 오류 msg :-)) : :

Me.txtProvNum.Text = IIf(Convert.IsDBNull(myReader("Prov_Num")), "", myReader("Prov_Num"))

나는 이것이 사용하기가 훨씬 쉽다고 생각합니다.

tablemename에서 isnull (sum (field), 0)를 선택하십시오.

복사 : http://www.codeproject.com/questions/736515/how-o-i-a-avoide-conversion-from-type-tbnull-to-typ

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top