【发布时间】:2016-01-14 04:17:22
【问题描述】:
我在 SQL Server 2008 R2 中编写了以下函数来获取数据库中两列的值,其中一列由整数 (ID) 和DATETIME 格式的其他日期/时间组成。它将两个值存储在两个不同的数组(列表)中,在这里定义:
Dim arrPartIDs As New List(Of Integer)
Dim arrPartUMDates As New List(Of Date)
我的目标是将每一行的日期时间值克隆到“Part_Previous_UMDate”列,当前设置为 NULL。
但是,当我的代码执行该行时:
WinToolSQLCmd.ExecuteReader()
之后
WinToolSQLCmd = New SqlCommand("UPDATE WTData.dbo.Parts SET Part_Previous_UMDate = '" & arrPartUMDates.Item(intUMDateCounter) & "' WHERE ID = " & PartID.ToString, WinToolConnection)
应用程序返回异常
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我认为通过创建数组(列表)arrPartUMDates 作为日期列表,我可以简单地将其值传输回数据库,但显然它们在添加到数组时被创建为字符串...
完全精确地将UMDate 中的DATETIME 值克隆到Part_Previous_UMDate 的最佳方法是什么?我需要完全精确,因为稍后我将比较两列的值以确定它们是否需要更新。
有什么想法吗?我已搜索此错误消息,但找不到与处理数组中的日期相关的任何内容...
这里的表格图片:http://i.stack.imgur.com/BYT1j.png
代码:
Function MirrorUMDateInPartsTable()
Dim arrPartIDs As New List(Of Integer)
Dim arrPartUMDates As New List(Of Date)
Dim WinToolConnection As New SqlConnection(StrGlobalWinToolConnection)
Dim intUMDateCounter As Integer = 0
WinToolSQLCmd = New SqlCommand("SELECT TOP 5 ID, UMDate FROM WTData.dbo.Parts WHERE WTData.dbo.Parts.Part_Previous_UMDate IS NULL ORDER BY ID", WinToolConnection)
WinToolConnection.Open()
Dim reader = WinToolSQLCmd.ExecuteReader()
While reader.Read()
arrPartIDs.Add(reader.Item(0))
arrPartUMDates.Add(reader.Item(1))
End While
reader.Close()
WinToolSQLCmd.Dispose()
If arrPartIDs.Count > 0 Then
For Each PartID As Integer In arrPartIDs
WinToolSQLCmd = New SqlCommand("UPDATE WTData.dbo.Parts SET Part_Previous_UMDate = '" & arrPartUMDates.Item(intUMDateCounter) & "' WHERE ID = " & PartID.ToString, WinToolConnection)
WinToolSQLCmd.ExecuteReader()
Next
End If
Return Nothing
End Function
【问题讨论】:
标签: sql-server vb.net datetime