none
Как именно TableAdapter поддерживает типы значения, допускающие NULL? RRS feed

Ответы

  • Нашел сам. Речь в той статье шла не об адаптерах таблиц ADO.NET, а об адаптерах таблиц для типизированных наборов данных (те, что создаются в IDE).

    Вот пример кода для функции Insert адаптера:

    Public Overloads Overridable Function Insert(ByVal p1 As String, ByVal p2 As String, ByVal p3 As String, ByVal p4 As Global.System.Nullable(Of Integer)) As Integer
    	' Ссылочный тип. Соответствующий столбец таблицы НЕ допускает пустых значений.
    	If (p1 Is Nothing) Then
    		Throw New Global.System.ArgumentNullException("p1")
    	Else
    		Me.Adapter.InsertCommand.Parameters(0).Value = CType(p1,String)
    	End If
    
    	...
    	
    	' Ссылочный тип. Соответствующий столбец таблицы ДОПУСКАЕТ пустых значений.
    	If (p3 Is Nothing) Then
    		Me.Adapter.InsertCommand.Parameters(2).Value = Global.System.DBNull.Value
    	Else
    		Me.Adapter.InsertCommand.Parameters(2).Value = CType(p3,String)
    	End If
    	
    	' Тип значений. Соответствующий столбец таблицы ДОПУСКАЕТ пустых значений.
    	If (p4.HasValue = true) Then
    		Me.Adapter.InsertCommand.Parameters(3).Value = CType(p4.Value,Integer)
    	Else
    		Me.Adapter.InsertCommand.Parameters(3).Value = Global.System.DBNull.Value
    	End If
    
    	...
    


    Ссылочные типы таким адаптером считаются пустыми при передаче Nothing, а типы значений передаются в виде параметров явно заданных как Nullable(Of Тип).

    При этом пустые значения преобразуются в System.DBNull.Value - то, что "понимает" база данных.

    2 декабря 2011 г. 22:18