다음 코드는 프로젝트에서 datatable 확장으로 작성한 것입니다. 그것은 실제로 효과가있었습니다. 어떤 최적화가 이루어질 수 있는지 궁금합니다. 감사. =)데이터 테이블에 NULL의 기본값을 설정하십시오.
이 질문은 어떻게 든 CR에 속해야한다고 생각합니다. 그냥 물어보십시오. 내가 입력 테이블이 Nothing
인 경우를 처리하는 것, 어느 쪽 ArgumentNullException
또는 반환을 던져 : 첫 번째 방법에 따르면
을 :
<Extension()>
Public Function HasNull(ByVal dataTable As DataTable) As Boolean
For Each column As DataColumn In dataTable.Columns
If dataTable.Rows.OfType(Of DataRow)().Any(Function(r) r.IsNull(column)) Then
Return True
End If
Next
Return False
End Function
<Extension()>
Public Function SetDefaultForNull(ByVal dataTable As DataTable) As DataTable
For Each row As DataRow In dataTable.Rows
For Each col As DataColumn In dataTable.Columns
Dim value As Object = row(col)
If IsDBNull(value) Then
Dim dataType As String = col.DataType.ToString
Select Case dataType
Case "System.DateTime"
value = New DateTime
Case "System.Decimal", "System.Int16", "System.Int32", "System.Int64"
value = 0
Case "System.String"
value = String.Empty
Case "System.Boolean"
value = False
Case Else
value = 0
End Select
row(col) = value
End If
Next
Next
Return dataTable
End Function
입력 테이블이'Nothing' 인 경우,'ArgumentNullException'을 던지거나'True' /'False'를 반환합니다. 또한 또 다른 사소한 개선 : 나는 열 대신 행을 반복합니다. 마지막 열을 제외한 모든 열이 널이 아닌 것으로 간주하십시오. null을 감지하기 전에 모든 열의 모든 행을 반복합니다. 행을 반복하면 이미 첫 번째 행에있는 행을 확인하게됩니다 (마지막 행이 null 인 경우). –
@Tim Schmelter. 응답 해 주셔서 감사합니다. 두 번째 함수에 대한 나의 의도는 null 인 각 셀의 기본값을 설정하는 것입니다. 그래서 어떻게 든 각 행과 열을 반복해야합니까? – HengChin
나는 주로 첫 번째 방법을 언급했다. –