VB.Net将DateTimePicker插入MS Access数据库

VB.Net将DateTimePicker插入MS Access数据库,vb.net,ms-access,Vb.net,Ms Access,祝stackoverflow的每一个人都好!我有一个简单的问题,也许你们可以帮我解决。我创建了一个原型,用于将DateTimePicker插入MS Access数据库。我遵循了这个指南: 虽然这对提问的人有帮助,但对我一点帮助都没有:( 这是图片,这是我的代码。这只是一个简单的原型,如果解决了,我将能够将其实现到我与同学一起开发的实际系统中 显然有一个语法错误。但是如果我只删除datetimepicker代码,我就可以毫无问题地插入我的姓氏,并将其显示在MS Access中。这些是代码 Imp

祝stackoverflow的每一个人都好!我有一个简单的问题,也许你们可以帮我解决。我创建了一个原型,用于将DateTimePicker插入MS Access数据库。我遵循了这个指南: 虽然这对提问的人有帮助,但对我一点帮助都没有:(

这是图片,这是我的代码。这只是一个简单的原型,如果解决了,我将能够将其实现到我与同学一起开发的实际系统中

显然有一个语法错误。但是如果我只删除datetimepicker代码,我就可以毫无问题地插入我的姓氏,并将其显示在MS Access中。这些是代码

Imports System.Data.OleDb
Public Class Form1
    Dim conString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Israel De Leon\Documents\dateinsert.accdb;"
    Dim con As OleDbConnection = New OleDbConnection(conString)
    Dim cmd As OleDbCommand
    Dim adapter As OleDbDataAdapter
    Dim dt As DataTable = New DataTable()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListView1.View = View.Details
        ListView1.FullRowSelect = True

        ListView1.Columns.Add("Last Name", 100)
        ListView1.Columns.Add("Date", 100)
    End Sub

    Public Sub add()
        Dim SQL As String = "INSERT INTO Table1(LastName, Time) VALUES (@LastName, @Time)"
        cmd = New OleDbCommand(SQL, con)

        cmd.Parameters.AddWithValue("@LastName", TextBox1.Text)
        cmd.Parameters.AddWithValue("@Time", DateTime.Parse(DateTimePicker1.Value))

        'OPEN CONNECTION AND INSERT
        Try
            con.Open()

            If cmd.ExecuteNonQuery() > 0 Then
                MsgBox("Succesfully Inserted")

            End If

            con.Close()


        Catch ex As Exception
            MsgBox(ex.Message)
            con.Close()
        End Try
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        add()
    End Sub
End Class

请帮我解决这个问题。谢谢:D

问题是时间列的名称。时间在MS Access中是一个保留字。您需要在该名称周围加上方括号

Dim SQL As String = "INSERT INTO Table1(LastName, [Time]) VALUES (@LastName, @Time)"
我还强烈建议您这样做,但更精确的Add可以正确设置参数的数据类型,并避免AddWithValue的隐藏代码将您的输入转换为预期的输入

cmd.Parameters.Add("@LastName", OleDbType.VarWChar, 100).Value = TextBox1.Text
cmd.Parameters.Add("@Time", OleDbType.DateTime).Value =DateTimePicker1.Value

请注意,Add方法还允许您定义文本情况下的数据大小。这允许数据库引擎优化插入查询。(不确定access是否也会出现这种情况,但Sql Server肯定会出现这种情况,这是一个重要的优化)

问题在于列Time的名称。Time是MS Access中的保留字。您需要在该名称周围加上方括号

Dim SQL As String = "INSERT INTO Table1(LastName, [Time]) VALUES (@LastName, @Time)"
我还强烈建议您这样做,但更精确的Add可以正确设置参数的数据类型,并避免AddWithValue的隐藏代码将您的输入转换为预期的输入

cmd.Parameters.Add("@LastName", OleDbType.VarWChar, 100).Value = TextBox1.Text
cmd.Parameters.Add("@Time", OleDbType.DateTime).Value =DateTimePicker1.Value

请注意,Add方法还允许您在文本情况下定义数据的大小。这允许数据库引擎优化插入查询。(不确定access是否也会发生这种情况,但Sql Server肯定是一个重要的优化)

最好使用
monthCalendar
控件:

textBox1.Text = monthCalendar1.SelectionRange.Start.Date.ToShortDateString()
cmd.Parameters.AddWithValue("@Time", textBox1.Text)

最好使用
monthCalendar
控件:

textBox1.Text = monthCalendar1.SelectionRange.Start.Date.ToShortDateString()
cmd.Parameters.AddWithValue("@Time", textBox1.Text)