문제
내가 원하는 일부를 생성하는 포맷의 출력 데이터에서 검색 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 를 사용하는 이 변환은 지원,그리고 그들은 변경할 수 없습니다.
단지 제안,그러나 내가 무슨 일반적으로 하는 이것:
- 모든 포함하는 변수 데이터를 읽거나 쓸 데이터베이스를 처리할 수 있어야 합 null 값이 있습니다.에 대한 가치 유형,이미 그들을 만드는 널(T).참고를 위한 형태(문자열과 바이트()),즉 수 있도록 가치를 아무것도 할 수 없습니다.
- 쓰의 세트로 변환하는 기능을 다시 사이에"개체를 포함할 수 있는 이 변환은 지원"및"입니다.순이 변수".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으로 변환하는 가장 짧은 방법입니다.
- 셀 검증 이벤트를 작성 하고이 코드를 작성하십시오
- convert.tostring (dgv.currentcell.value) = ""인 경우
- currentCell.Value = ""
- 끝 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