我有一个VB.Net项目,我想在MSQL DB中保存确切的日期时间。但我无法捕捉时间和日期。
预期行为:在DB 12-03-2012 01:03:23
当前行为:在DB 12-03-2012 00:00:00
下面的代码片段:
Dim temp = System.DateTime.Now
Code(temp)
Public Sub Code(ByVal dte As DateTime)
Dim strSQl As String = String.Format("Update tblTenant Set dte = '{0}' blablalbla", dte)
Me._Inst.execSQL(strSQl)
End Sub
编辑 DB中的列类型为DATETIME
答案 0 :(得分:1)
我不确定您的Public Sub execSQL(ByVal SQL As String, Optional ByVal ParamArray QueryParameters() As MySqlParameter)
Using cn As New MySqlConnection("connection string here"), _
cmd As New MySqlCommand(SQL, cn)
If QueryParameters IsNot Nothing Then
For Each p As MySqlParameter In QueryParameters
'This does NOT EVER do string manipulation to set the data into the query
' Instead, it's sent to the server in a separate data section, where the variables are setup.
' In this way, data stays separate from code, and any possibility of sql injection is prevented.
cmd.Parameters.Add(p)
Next
End If
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
方法是如何构建的,但将变量数据直接替换为SQL查询字符串是不正常的或完全没问题。这是让你的程序被黑客攻击的好方法。相反,您需要一种机制来分别接受数据并将数据发送到服务器。通常看起来像这样:
Public Sub Code(ByVal dte As DateTime)
Dim strSQl As String = "Update tblTenant Set dte = @dte blablalbla"
Dim dteParam As New MySqlParameter("@dte", MySqlDbType.DateTime)
dteParam.Value = dte
Me._Inst.execSQL(strSQl, dteParam)
End Sub
然后你这样称呼它:
$query = " SELECT * FROM books
WHERE bookTitle LIKE :search_word ";
我见过很多情况,切换到查询参数也修复了令人烦恼的格式或语法问题,足以让我相信在这里使用查询参数很可能会解决提示您提问的问题。
答案 1 :(得分:-1)
你的sql列类型是date (你说它不是)或者你没有将完整的日期和时间传递给查询。
仔细检查sql列类型。
然后使用中间字符串调试Code
方法以保存日期时间。检查它是否有时间。
Public Sub Code(ByVal dte As DateTime)
Dim dateString = dte.ToString("MM-dd-yyyy hh:mm:ss")
Dim strSQl As String = String.Format("Update tblTenant Set dte = '{0}' blablalbla", dateString)
End Sub
现在,如果数据库中的类型正确,并且您的查询实际上是
更新tblTenant Set dte =' 04-21-2017 11:04:41' blablalbla
但是你还没有看到数据库中的时间,你有一个不同的问题。