如何在MySQL中保存确切的日期时间

时间:2017-04-21 13:42:21

标签: mysql vb.net

我有一个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

2 个答案:

答案 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

enter image description here

现在,如果数据库中的类型正确,并且您的查询实际上是

  

更新tblTenant Set dte =' 04-21-2017 11:04:41' blablalbla

但是你还没有看到数据库中的时间,你有一个不同的问题。