我有一个winforms .net 2.0应用程序正在点击MS SQL 2008服务器。我从该服务器加载一个DataSet,通过绑定的winform控件和放大器公开一堆数据集。然后通过SqlDataAdapters推送更新。
一个这样的适配器附加到具有两个关键字段RecruitID和StatusDate的表。 StatusDate是服务器上的DateTime字段,DataSet中的System.DateTime。
我最近得到了DBConcurrencyExceptions我认为日期信息格式的b / c。如果我捕获适配器正在生成的SQL,我会看到WHERE条件如下:
WHERE (RecruitID = 236) AND (StatusDate = '2010-05-27 04:45:34.053')
当他们应时,
WHERE (RecruitID = 236) AND (StatusDate = '2010-05-27 16:45:34.053')
所以 - 小时应该在军事时间 - 如果我在mssql管理工作室中查询数据库中的正确记录,那就是显示的。我不确定从军队到上午/下午时间的翻译时间在哪里,所以我不知道在哪里尝试阻止它。
此日期显示在DataGrid中。相关的DataGridColumnStyle实例具有.Format属性='g',它将上述日期转换为“5/27/2010 4:45 PM”进行显示。如果我删除'g'格式的属性,它没有任何区别。
有人能告诉我一个线索吗?
非常感谢提前!
-Roy
答案 0 :(得分:0)
确认 - 尴尬。 SQL中的日期/时间格式关闭只是因为我捕获它的方式。具体来说,我正在打电话.ToString&传递一种自定义格式(我认为)正在进行时间转换。发送到数据库的实际内容我认为具有正确的值。
我最终从sqladapters CommandText SQL中删除了一些触发器填充的字段,这似乎是一个修复。 (虽然我仍然不确定为什么我会得到DBConcurrencyException。)时间也许会告诉我。
感谢您的考虑!
-Roy
Private Sub RecordSQL(ByVal sender As Object, ByVal e As SqlClient.SqlRowUpdatingEventArgs) Handles sdaRecruitStatuses.RowUpdating
Dim pvalue As String
m_strLastSQL = e.Command.CommandText
For Each prm As SqlClient.SqlParameter In e.Command.Parameters
If TypeOf prm.Value Is DateTime Then
pvalue = "'" & CType(prm.Value, DateTime).ToString("yyyy-MM-dd hh:mm:ss.fff") & "'"
Else
pvalue = prm.Value.ToString()
If pvalue.Length = 0 Then pvalue = "NULL"
End If
m_strLastSQL = Replace(m_strLastSQL, prm.ParameterName, pvalue)
Next
End Sub