VS-Studio 2012 Web Express, ASP.NET, WebForms, VB, SqlServer, WebSite приложение Не удалось сохранить значение NULL для DateTime в строго типизированных ROW:Как сохранить нулевое datetime в SqlServer DB? не работает
Dim oRowVEHICLES As Main_TblAdap.tVEHICLESRow = odtVEHICLES.Rows(0) ' (0) is the first row.
oRowVEHICLES.[WElectrical] = If(WElectrical.Year < 10, DBNull.Value, WElectrical)
...etc...
В настоящее время DetailsView шаблон поле текстовое поле < пустой> или пустой или "", а функция BLL показывает это как дату: # 01/01/0001 #. Поэтому я тестирую значение YEAR переданного в переменной, если меньше 10, а затем сохраняет DBNull.Value в oRowVehicles. [WElectrical], но не работает с datatype = Date и не может преобразовать DBNull в Date.
Поле DB - это тип Date и допускает null.
В представлении TableAdapter.xsd указано значение по умолчанию: < DBNULL>.
Итак, почему oRowVehicles не Date NULL?
Как я могу сделать WEBC-таблицу нулевой DATE?
Должно быть, что-то не замечаю, потому что я не могу быть единственным, кто сохранит необязательное значение DATE для Sql-DB.
Ваши комментарии и решения приветствуются. Спасибо ... Джон
EDIT ASPX код один DATE поле в DetailsView (другие аналогичные):
<asp:TemplateField HeaderText="Electrical End Date" SortExpression="WElectrical">
<EditItemTemplate>
<TGADate:GADate ID="ucdtWElectrical" runat="server" Enabled="True" MinDate="01/01/1980" MaxDate="12/31/2050"
Caption="Electrical End Date" HideCaption="True" Width="100"
IsRequired="false"
UpdateMode="Conditional"
Text='<%# Bind("WElectrical")%>' />
</EditItemTemplate>
<InsertItemTemplate>
<TGADate:GADate ID="ucdtWElectrical2" runat="server" Enabled="True" MinDate="01/01/1980" MaxDate="12/31/2050"
Caption="Electrical End Date" HideCaption="True" Width="100"
IsRequired="false"
UpdateMode="Conditional"
Text='<%# Bind("WElectrical")%>' />
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="lblWElectrical" runat="server" Text='<%# clsGA_Lib1.fnGetDateTextFromObject(Eval("WElectrical"))%>' Style="font-weight: bold;"></asp:Label>
</ItemTemplate>
<ItemStyle Font-Bold="true" />
</asp:TemplateField>
Объект определения параметра DataSource в ASPX.
<asp:Parameter Name="WElectrical" Type="DateTime" />
BLL Код:
<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, False)> _
Public Function UpdateFromDetailsView(ByVal original_UID_VEHICLE As Int32, _
ByVal VehicleNbr As String, _
...other function parameter variables...
ByVal WElectrical As Date, _
...other function parameter variables...
) As Boolean
' Get the new VEHICLE-row instance to be updated.
Dim odtVEHICLES As Main_TblAdap.tVEHICLESDataTable = Adapter.GetVhclByVhclID(original_UID_VEHICLE)
If odtVEHICLES.Count <> 1 Then
' no matching record found, return false
Return False
End If
' Populate the values of the ROW.
Dim oRowVEHICLES As Main_TblAdap.tVEHICLESRow = odtVEHICLES.Rows(0) ' (0) is the first row.
With oRowVEHICLES
...setting row-field values...
.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
...etc...
End With
' Update the oRowVEHICLES.
Dim rowsAffected As Integer = Adapter.Update(odtVEHICLES)
' Return TRUE if precisely one row was INSERTED, otherwise false.
Return CBool(rowsAffected = 1)
End Function
Редактировать комментарий для приведенного выше кода
WElectrical параметр, приходящего в BLL-функции является DATE со значением # 01/01/0001 #.
код, чтобы поместить значение в ROW-объекта
.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
мест Ничего как строки-объекта-поля-значения.
Adapter.Update (odtVEHICLES) обновляет Sql-DB.
Так что же заставляет значение # 01/01/0001 # быть помещенным в Sql-DB?
SQL-БД определение столбца
//////// конца Edit ///////////
Если вы имеете дело с объектами .net, используйте 'null' или' Nothing'. Используйте «DBNull» только тогда, когда вы напрямую работаете с базой данных, например, отправляете параметр в запрос или SP. Является ли 'WElectrical' полем типа' DateTime? '? Я не в VB, поэтому вам может понадобиться сделать то, что задано здесь: http://stackoverflow.com/questions/12595775/how-do-i-set-a-nullable-datetime-to-null-in-vb -net – Andrew
Спасибо за этот комментарий. Ссылка очень информативна и очень важна. Я проверю эти изменения и дам вам знать. Спасибо. –
Похоже, вы используете адаптер стола. Вам необходимо установить параметр AllowNulls: https://msdn.microsoft.com/en-us/library/ms233762.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1 –