Private Sub Save_Record()
Dim conn As New OleDbConnection
Dim cmd As New OleDbCommand
Dim sSQL As String = String.Empty
Try
conn = New OleDbConnection(Get_Constring)
conn.Open()
cmd.Connection = conn
cmd.CommandText = CommandType.Text
If Me.txt_Forename.Tag = 0 Then
sSQL = "INSERT INTO PlayerDatabase ( Age_Group, Surname, Forename, Rating, DOB, Address, Email, Position, Foot, Mins_Played, Goals, Assists, Yellow_Cards, Red_Cards)"
sSQL = sSQL & " VALUES(@Age_Group, @Surname, @Forename, @Rating, @DOB, @Address, @Email, @Position, @Foot, @Mins_Played, @Goals, @Assists, @Yellow_Cards, @Red_Cards)"
Else
sSQL = "UPDATE PlayerDatabase set Age_Group = @Age_Group, Surname = @Surname, Forename = @Forename, Rating = @Rating, DOB = @DOB, Address = @Address, Email = @Email, Position = @Position, Foot = @Foot, Mins_Played = @Mins_Played, Goals = @Goals, Assists = @Assists, Yellow_Cards = @Yellow_Cards, Red_Cards = @Red_Cards WHERE ID = @id"
cmd.CommandText = sSQL
End If
cmd.Parameters.Add("@Surname", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Surname.Text)) > 0, Me.txt_Surname.Text, DBNull.Value)
cmd.Parameters.Add("@Forename", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Forename.Text)) > 0, Me.txt_Forename.Text, DBNull.Value)
cmd.Parameters.Add("@DOB", OleDbType.Date).Value = Me.dtp_DOB.Text
cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = Me.txt_Address.Text
cmd.Parameters.Add("@Age_Group", OleDbType.VarChar).Value = Me.cb_AgeGroup.Text
cmd.Parameters.Add("@Rating", OleDbType.VarChar).Value = Me.cb_Rating.Text
cmd.Parameters.Add("@Email", OleDbType.VarChar).Value = Me.txt_Email.Text
cmd.Parameters.Add("@Position", OleDbType.VarChar).Value = Me.cb_Position.Text
cmd.Parameters.Add("@Foot", OleDbType.VarChar).Value = Me.cb_Foot.Text
cmd.Parameters.Add("@Mins_Played", OleDbType.VarChar).Value = Me.nup_MinsPlayed.Text
cmd.Parameters.Add("@Goals", OleDbType.VarChar).Value = Me.nup_Goals.Text
cmd.Parameters.Add("@Assists", OleDbType.VarChar).Value = Me.nup_Assists.Text
cmd.Parameters.Add("@Yellow_Cards", OleDbType.VarChar).Value = Me.nup_YellowCards.Text
cmd.Parameters.Add("@Red_Cards", OleDbType.VarChar).Value = Me.nup_RedCards.Text
cmd.Parameters.Add("@ID", OleDbType.Numeric).Value = Me.txt_Forename.Tag
cmd.ExecuteNonQuery()
If Me.txt_Forename.Tag = 0 Then
cmd.CommandText = "Select @@Identity"
Me.txt_Forename.Tag = cmd.ExecuteScalar()
End If
MsgBox("Data has been saved.")
Catch ex As Exception
MsgBox(ErrorToString)
Finally
conn.Close()
End Try
End Sub
不知道我在做什么错。这是从各种文本框,组合框等向Access数据库添加的内容。当在具有输入的表单上按下按钮时,将运行此过程。我是vb.net和程序设计的初学者,所以如果很明显,我对此表示歉意。
谢谢
单词POSITION在MS-Access Jet Sql中保留。这是语法错误的原因。
如果要将其用作列或表的名称,则需要将其放在方括号之间
sSQL = "INSERT INTO PlayerDatabase ( Age_Group, Surname, Forename, Rating, DOB, " & _
"Address, Email, [Position], Foot, Mins_Played, Goals, Assists, Yellow_Cards, Red_Cards)"
....
sSQL = "UPDATE PlayerDatabase set Age_Group = @Age_Group, Surname = @Surname, " & _
"Forename = @Forename, Rating = @Rating, DOB = @DOB, Address = @Address, " & _
"Email = @Email, [Position] = @Position, Foot = @Foot, Mins_Played = @Mins_Played, " & _
"Goals = @Goals, Assists = @Assists, Yellow_Cards = @Yellow_Cards, " & _
"Red_Cards = @Red_Cards WHERE ID = @id"
一部分,您还有另一个问题。OleDb无法通过参数名称识别参数。通常,您应该使用问号而不是名称,但是Access允许此标记可能是对它的大表弟Sql Server的某种可移植性。无论如何,您都应按照在查询中命名的占位符出现的顺序,将参数添加到OleDbCommand集合中。因此,您需要以下命令:
cmd.Parameters.Add("@Age_Group", OleDbType.VarChar).Value = Me.cb_AgeGroup.Text
cmd.Parameters.Add("@Surname", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Surname.Text)) > 0, Me.txt_Surname.Text, DBNull.Value)
cmd.Parameters.Add("@Forename", OleDbType.VarChar).Value = IIf(Len(Trim(Me.txt_Forename.Text)) > 0, Me.txt_Forename.Text, DBNull.Value)
cmd.Parameters.Add("@Rating", OleDbType.VarChar).Value = Me.cb_Rating.Text
cmd.Parameters.Add("@DOB", OleDbType.Date).Value = Me.dtp_DOB.Text
cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = Me.txt_Address.Text
cmd.Parameters.Add("@Email", OleDbType.VarChar).Value = Me.txt_Email.Text
cmd.Parameters.Add("@Position", OleDbType.VarChar).Value = Me.cb_Position.Text
cmd.Parameters.Add("@Foot", OleDbType.VarChar).Value = Me.cb_Foot.Text
cmd.Parameters.Add("@Mins_Played", OleDbType.VarChar).Value = Me.nup_MinsPlayed.Text
cmd.Parameters.Add("@Goals", OleDbType.VarChar).Value = Me.nup_Goals.Text
cmd.Parameters.Add("@Assists", OleDbType.VarChar).Value = Me.nup_Assists.Text
cmd.Parameters.Add("@Yellow_Cards", OleDbType.VarChar).Value = Me.nup_YellowCards.Text
cmd.Parameters.Add("@Red_Cards", OleDbType.VarChar).Value = Me.nup_RedCards.Text
仅当您具有INSERT的UPDATE路径时,才应添加此最后一个参数。(假设ID列为“自动递增”)
If Me.txt_Forename.Tag <> 0 Then
cmd.Parameters.Add("@ID", OleDbType.Numeric).Value = Me.txt_Forename.Tag
End If
最后,当您尝试读取@@ IDENTITY值时,这也是另一个问题。使用相同的命令很好,但是您需要清除参数集合
If Me.txt_Forename.Tag = 0 Then
cmd.Parameters.Clear()
cmd.CommandText = "Select @@Identity"
Me.txt_Forename.Tag = cmd.ExecuteScalar()
End If
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句