Option Explicit On
Imports System.Data.OleDb
Public Class Form1
Dim objCon As New OleDbConnection
Dim strSQL As String
Dim strConnect As String = "Provider= Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abry\Documents\Bilik.accdb"
Dim da As New OleDb.OleDbDataAdapter
Dim ds As New DataSet
Private Sub TempahButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TempahButton.Click
Dim startDate As Date
Dim str As String
startDate = DateTimePicker1.Value
objCon.ConnectionString = strConnect
objCon.Open()
str = "Insert into bilik(Bilik, Tujuan, Tarikh, Masa Masuk, Masa Keluar) values('" & BilikComboBox.SelectedIndex & "','" & TujuanTextBox.Text & "','" & DateTimePicker1.Value.ToShortDateString & "','" & MasaMasukMaskedTextBox.Text & "','" & MasaKeluarMaskedTextBox.Text & "')"
Dim cmd As OleDbCommand = New OleDbCommand(str, objCon)
cmd.Parameters.Add(New OleDbParameter("Bilik", CType(BilikComboBox.SelectedIndex, String)))
cmd.Parameters.Add(New OleDbParameter("Tujuan", CType(TujuanTextBox.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Tarikh", CType(DateTimePicker1.Value, Date)))
cmd.Parameters.Add(New OleDbParameter("Masa Masuk", CType(MasaMasukMaskedTextBox.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Masa Keluar", CType(MasaKeluarMaskedTextBox.Text, String)))
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
objCon.Close()
TujuanTextBox.Clear()
BilikComboBox.Text = ""
DateTimePicker1.Value = ""
MasaMasukMaskedTextBox.Clear()
MasaKeluarMaskedTextBox.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
此数据库位于MS ACCESS上
插入语句始终出错
答案 0 :(得分:0)
应为该项目和所有项目设置“严格启用”选项。这是一个两部分的过程。首先针对当前项目-在解决方案资源管理器中,双击我的项目。选择左侧的编译。在Option Strict下拉菜单中,选择ON。第二个用于将来的项目-转到“工具”菜单->“选项”->“项目和解决方案”->“ VB默认值”。在Option Strict下拉菜单中,选择ON。这样可以避免在运行时出现错误。
将数据库对象保留在本地,以便您可以控制它们是否已关闭和处置。即使有错误,Using...End Using
块也会为您完成此操作。
您要将这些值连接到sql中(非常糟糕-将应用程序打开到sql注入),然后在Insert语句中不存在任何参数时尝试添加参数。您可以将问号用作参数的占位符或使用名称。 Access不在乎名称。只有sql语句中的位置与参数添加到参数集合的顺序匹配。我喜欢使用名称,因此可以轻松检查是否以正确的顺序添加了参数。
.Text属性包含一个字符串,因此不必将其转换为字符串。
DataTimePicker的.Value属性是DateTime。无需转换。
添加参数时,请使用接受OleDbType和理想情况下的大小的重载。您将需要检查数据库中的字段以获取此信息。
在关闭连接之前,不显示消息框或清除文本框。连接是珍贵的对象,应在最后一刻打开并尽快关闭。
Dim strConnect As String = "Provider= Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abry\Documents\Bilik.accdb"
Private Sub TempahButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TempahButton.Click
Try
Using objCon As New OleDbConnection(strConnect)
Dim str = "Insert into bilik(Bilik, Tujuan, Tarikh, [Masa Masuk], [Masa Keluar]) values(@Bilik, @Tujuan, @Tarikh, @MasaMasuk, @MasaKeluar);"
Using cmd As OleDbCommand = New OleDbCommand(str, objCon)
cmd.Parameters.Add("@Bilik", OleDbType.VarChar).Value = BilikComboBox.SelectedIndex.ToString
cmd.Parameters.Add("@Tujuan", OleDbType.VarChar).Value = TujuanTextBox.Text
cmd.Parameters.Add("@Tarikh", OleDbType.Date).Value = DateTimePicker1.Value
cmd.Parameters.Add("@MasaMasuk", OleDbType.VarChar).Value = MasaMasukMaskedTextBox.Text
cmd.Parameters.Add("@MasaKeluar", OleDbType.VarChar).Value = MasaKeluarMaskedTextBox.Text
objCon.Open()
cmd.ExecuteNonQuery()
End Using
End Using 'Closes and disposes the connection
Catch ex As Exception
MsgBox(ex.Message)
End Try
TujuanTextBox.Clear()
BilikComboBox.SelectedIndex = -1
DateTimePicker1.Value = ""
MasaMasukMaskedTextBox.Clear()
MasaKeluarMaskedTextBox.Clear()
End Sub