在stackoverflow这里的每个人都过得愉快!我有一个简单的问题,也许你们可以帮助我。我创建了一个原型,用于将DateTimePicker插入MS Access数据库。我按照这个指南: date time conversion problem when inserting data into sql database虽然它帮助了提问的人,但它根本没有帮助我:(
这是图片,这是我的代码。这只是一个简单的原型,如果解决了,我将能够将它实现到我与同学一起工作的实际系统中。
显然存在语法错误。但是,如果我只删除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
答案 0 :(得分:3)
问题是列Time的名称。时间是MS-Access中的保留字。您需要在该名称周围加上方括号
Dim SQL As String = "INSERT INTO Table1(LastName, [Time]) VALUES (@LastName, @Time)"
我还强烈建议您not use AddWithValue,但更精确的添加可以正确设置参数的数据类型,并避免将输入转换为预期的AddWithValue隐藏代码
cmd.Parameters.Add("@LastName", OleDbType.VarWChar, 100).Value = TextBox1.Text
cmd.Parameters.Add("@Time", OleDbType.DateTime).Value =DateTimePicker1.Value
请注意,Add方法允许您在文本的情况下定义数据的大小。这允许数据库引擎优化您的插入查询。 (不确定这是否也会发生访问,但肯定是使用Sql Server这是一个重要的优化)
答案 1 :(得分:0)
最好使用monthCalendar
控件:
textBox1.Text = monthCalendar1.SelectionRange.Start.Date.ToShortDateString()
cmd.Parameters.AddWithValue("@Time", textBox1.Text)