从datetimepicker获取日期到mysql

从datetimepicker获取日期到mysql,mysql,vb.net,datetimepicker,Mysql,Vb.net,Datetimepicker,我的应用程序中有一个datetimepicker,最终用户将使用它来选择项目推迟到何时 如果用户选择一个日期并点击“确认”,则该日期应被放入此条目的mysql记录中,但我似乎无法让VB更新日期值:( 我认为这可能是一个格式化的问题,但我不确定如何最好地克服这个问题 他是“确认”按钮后面的密码 Private Sub ConfirmDefer_Click(sender As Object, e As EventArgs) Handles ConfirmDefer.Click Dim de

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

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

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

他是“确认”按钮后面的密码

  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”位是我用来简化数据库更新的函数。 其输出SQL命令如下:

  UPDATE newbusiness_dataset SET action_date='20/02/2016' WHERE id='100001'
感谢您的帮助!提前谢谢

输出SQL命令如下:
UPDATE newbusiness\u数据集设置操作\u date='20/02/2016'其中id='100001'

函数更新的方式可能不正确。记号不是通用的SQL变量分隔符。它们用于指示文本:因此,您的方法正在将
日期
转换为字符串,可能与Id相同,Id通常为数字。类似地,此代码:

Dim deferdate As Date = Format(nb_deferdatepicker.Value, "yyyy-MM-dd")
使用
选项Strict On
将不会编译。
Format
是一个返回字符串的函数,但代码将结果分配给
日期时间
变量。根本没有理由尝试格式化
日期时间选择器
值,因为它已经是日期,MySQL NET数据提供程序对象知道如何将净日期传递给db

鉴于产生的SQL,我还怀疑您正在使用串联将字符串的位粘合在一起进行查询。这是非常危险的,可能会导致攻击。它也会在诸如Charles D'Artagnan或Pete's Pimping之类的名称上失败

SQL参数可防止这种情况,允许您将类型化数据传递给数据提供程序,从而使SQL易于读取和维护。一般做法如下:

将行变暗为Int32
Dim SQL=“更新表名集合colA=@p1,colB=@p2,colC=@p3,其中Id=@p4”
将dbcon用作新的MySqlConnection(connStr)
使用cmd作为新的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
“其中:
cmd.Parameters.Add(“@p4”,MySqlDbType.Int32)。Value=intVarA
dbcon.Open()
rows=cmd.ExecuteNonQuery()
终端使用
终端使用
  • 使用块处理应该被处理的东西以释放资源
  • 创建、使用和处置新的连接和命令对象。帮助者通常喜欢重用这些对象,但尤其是对于DBCommand对象,它们没有可重用的地方
  • 由于
    ExecuteNonQuery
    将报告受影响的行数,
    rows
    捕获该结果
神奇之处在于:

cmd.Parameters.Add(“@p3”,MySqlDbType.Date).Value=datetimeVar
使用参数可以传递实际的
DateTime
变量而不是文本。可以使用
myDateTimePicker.Value
,因为值
DateTime

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

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

是数据库中的action_date
datetime
吗?它是“date”,而不是“datetime”,因为我根本不在乎时间,只是date。我也尝试过将它更改为datetime,以查看它是否有所不同,但仍然如此它不会更新记录。将其更改为
yyyy-mm-dd
小写字母“mm”为分钟,并导致异常…从字符串“2016-18-22”转换为类型“Date”无效。如果回答了此问题,请单击复选标记,以便将此问题从未回答列表中删除