VS工作室2012網絡快車,ASP.NET,WebForms的,VB,SQLSERVER,有麻煩的DateTime NULL值保存到強類型ROW網頁應用:如何將空日期時間保存到SqlServer數據庫?不工作
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控件模板字段文本框是< blank>或空或「」,BLL函數將其顯示爲如下日期:#01/01/0001#。所以我測試傳入變量的YEAR值,如果小於10,則將DBNull.Value保存到oRowVehicles [WElectrical],但由於datatype = Date而失敗,並且無法將DBNull轉換爲Date。
DB字段是Date類型並允許空值。
TableAdapter.xsd視圖顯示默認值爲< DBNULL>。
那麼,爲什麼oRowVehicles不能日期爲空?
如何使WElectrical列可以爲空?
我必須忽略一些東西,因爲我不能將唯一一個將可選DATE值保存到Sql-DB。
歡迎您提出意見和解決方案。謝謝...約翰
編輯 ASPX代碼DATE一個在DetailsView(其它類似)域:在ASPX
<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對象的參數定義。
<asp:Parameter Name="WElectrical" Type="DateTime" />
BLL代碼:對於上面的代碼
的WElectrical參數進入該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
編輯評論是用#01 /的值的DATE 01/0001#。
的代碼值放入ROW對象
.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
地方沒有什麼作爲行對象的字段值。
Adapter.Update(odtVEHICLES)更新Sql-DB。
那麼是什麼導致#01/01/0001#值被放入Sql-DB?
SQL的數據庫列定義
////////編輯結束///////////
如果您正在處理.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
謝謝你的評論。該鏈接非常豐富,非常重要。我將檢查這些更改並通知您。謝謝。 –
看起來你正在使用表格適配器。 YOu需要將該參數設置爲AllowNulls:https://msdn.microsoft.com/en-us/library/ms233762.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1 –