从datetimepicker获取日期到mysql

时间:2016-02-19 12:09:39

标签: mysql vb.net datetimepicker

我的应用程序中有一个datetimepicker,最终用户将用它来选择何时推迟项目。

如果用户选择日期并点击确认,则应将日期放入此条目的mysql记录中,但我似乎无法让VB更新DATE值:(

我认为它可能是格式化的东西,但我不确定如何最好地克服这个问题。

他确认'确认'背后的代码。按钮。

  Private Sub ConfirmDefer_Click(sender As Object, e As EventArgs) Handles ConfirmDefer.Click

  Dim deferdate As Date = Format(nb_deferdatepicker.Value, "yyyy-MM-dd")
  updatesql("newbusiness_dataset", "action_date", deferdate, "id='" &       nb_prospectid.Text & "'")

  nb_defer_schedule.Visible = False
  nb_defer_schedule.Enabled = False

  End Sub

' UpdateSQL' bit是我用来简化db更新的函数。 它的输出SQL命令如下:

  UPDATE newbusiness_dataset SET action_date='20/02/2016' WHERE id='100001'

任何帮助表示赞赏!提前致谢

1 个答案:

答案 0 :(得分:1)

  

输出SQL命令如下:
      UPDATE newbusiness_dataset SET action_date='20/02/2016' WHERE id='100001'

您的功能更新方式可能不正确。 Ticks不是通用SQL变量分隔符。它们用于指示文本:因此您的方法是将Date转换为字符串,并且可能与Id相同,通常为数字。同样,这段代码:

Dim deferdate As Date = Format(nb_deferdatepicker.Value, "yyyy-MM-dd")

使用Option Strict On这将无法编译。 Format是一个返回字符串的函数,但代码将结果赋给DateTime var。没有理由尝试格式化DateTimePicker值,因为它已经是日期,并且MySQL NET数据提供程序对象知道如何将.NET日期传递给数据库。

鉴于产生的SQL,我还怀疑你使用串联将字符串的位串在一起用于查询。这非常危险,可能会导致SQL injection次攻击。它也会在Charles D'ArtagnanPete's Plumbing等名称上失败。

SQL参数阻止了这一点,允许您将类型化数据传递给数据提供程序,从而使SQL易于读取和维护。一般方法是这样的:

Dim rows As Int32
Dim SQL = "UPDATE Table_Name SET colA = @p1, colB = @p2, colC = @p3 WHERE Id = @p4"

Using dbcon As New MySqlConnection(connStr)
    Using cmd As New MySqlCommand(SQL, dbcon)

        cmd.Parameters.Add("@p1", MySqlDbType.String).Value = myFrm.TextBox1.Text
        cmd.Parameters.Add("@p2", MySqlDbType.Int32).Value = intVar
        cmd.Parameters.Add("@p3", MySqlDbType.DateTime).Value = DateTime.Now
        ' the where:
        cmd.Parameters.Add("@p4", MySqlDbType.Int32).Value = intVarA

        dbcon.Open()
        rows = cmd.ExecuteNonQuery()

    End Using
End Using
  • USING阻止处理应该处理的东西以释放资源
  • 创建,使用和处理新的连接和命令对象。通常帮助者喜欢重用这些,但特别是对于DBCommand对象,没有任何可重用的东西。
  • 由于ExecuteNonQuery将报告受影响的行数,rows会捕获该结果。

魔法,就像它一样,在这里:

cmd.Parameters.Add("@p3", MySqlDbType.Date).Value = datetimeVar

使用参数可以传递实际的DateTime变量而不是文本。您可以使用myDateTimePicker.Value,因为值 DateTime

  • 对于Date列,使用MySqlDbType.Date参数只会将Date部分传递给数据库。
  • MySqlDbType.DateTime将保存数据库设置为接受的DateTime部分。

对于Id使用MySqlDbType.Int32也是如此:您可以传递正确的数据类型,而不是转换为字符串。