如何将空日期时间保存到 SQL Server 数据库?不工作
How to save a null datetime to SqlServer DB? not working
VS-Studio 2012 Web Express、ASP.NET、WebForms、VB、SqlServer、WebSite 应用程序在将 DateTime 的 NULL 值保存到强类型 ROW 时遇到问题:
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。
数据库字段是日期类型,允许空值。
TableAdapter.xsd 视图显示默认值为 。
那么,为什么 oRowVehicles 的 Date 不能为空?
如何使 WElectrical 列可为空 DATE?
我一定是忽略了什么,因为我不可能是唯一一个将可选 DATE 值保存到 Sql-DB 的人。
欢迎您提出意见和解决方案。谢谢...约翰
编辑
ASPX在DetailsView中编码一个DATE字段(其他类似):
<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>
ASPX中的Object DataSource参数定义。
<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
编辑以上代码的评论
进入 BLL 函数的 WElectrical 参数是一个日期,值为 #01/01/0001#。
将值放入 ROW 对象的代码
.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
放置 Nothing 作为行对象字段值。
Adapter.Update(odtVEHICLES)更新Sql-DB。
那么是什么导致将 #01/01/0001# 值放入 Sql-DB 中?
Sql-DB列定义
//////// 编辑结束 //////////
做一件事:
将 DBNull.Value 更改为无
或者,您可以将数据集中的数据类型更改为 System.Object,并且
转到该数据列的属性
然后你可以在下拉列表中 select '(Nothing)'。
将 Null 值设置为 >> Nothing
感谢以上问题的所有评论者。
解决方案是将 Row-column-variable 更改为投射 Nothing to Date 的这句话? (可为空)如下...
.[WElectrical] = If(WElectrical.Year < 10, CType(Nothing, Date?), WElectrical)
AND -- 更改了数据集列定义(在 .xsd 中)如下:
数据类型 ==> System.Object(不是日期)
NullValue ==>(无)(不抛出异常)
衷心感谢所有贡献者 -- 因为他们的每条建议都对这个解决方案做出了贡献。
这是将可空值发送到 DataRow 列的解决方案。
感谢您的帮助。
VS-Studio 2012 Web Express、ASP.NET、WebForms、VB、SqlServer、WebSite 应用程序在将 DateTime 的 NULL 值保存到强类型 ROW 时遇到问题:
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。
数据库字段是日期类型,允许空值。
TableAdapter.xsd 视图显示默认值为
那么,为什么 oRowVehicles 的 Date 不能为空?
如何使 WElectrical 列可为空 DATE?
我一定是忽略了什么,因为我不可能是唯一一个将可选 DATE 值保存到 Sql-DB 的人。
欢迎您提出意见和解决方案。谢谢...约翰
编辑 ASPX在DetailsView中编码一个DATE字段(其他类似):
<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>
ASPX中的Object DataSource参数定义。
<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
编辑以上代码的评论
进入 BLL 函数的 WElectrical 参数是一个日期,值为 #01/01/0001#。
将值放入 ROW 对象的代码
.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
放置 Nothing 作为行对象字段值。
Adapter.Update(odtVEHICLES)更新Sql-DB。
那么是什么导致将 #01/01/0001# 值放入 Sql-DB 中?
Sql-DB列定义
//////// 编辑结束 //////////
做一件事:
将 DBNull.Value 更改为无
或者,您可以将数据集中的数据类型更改为 System.Object,并且 转到该数据列的属性 然后你可以在下拉列表中 select '(Nothing)'。
将 Null 值设置为 >> Nothing
感谢以上问题的所有评论者。 解决方案是将 Row-column-variable 更改为投射 Nothing to Date 的这句话? (可为空)如下...
.[WElectrical] = If(WElectrical.Year < 10, CType(Nothing, Date?), WElectrical)
AND -- 更改了数据集列定义(在 .xsd 中)如下:
数据类型 ==> System.Object(不是日期)
NullValue ==>(无)(不抛出异常)
衷心感谢所有贡献者 -- 因为他们的每条建议都对这个解决方案做出了贡献。
这是将可空值发送到 DataRow 列的解决方案。
感谢您的帮助。