Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Try
Dim con As New SqlConnection
Dim cmd As New SqlCommand
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Comp-296\Project1\Project1\Game_time.mdb"
con.Open()
cmd.Connection = con
cmd.Connection = con
cmd.CommandText = ("UPDATE User_Name SET User_Name = @User_Name, Game_Name = @Game_Name, Score = @Score, Time/Date = @Time/Date")
cmd.Parameters.Add("@User_Name", SqlDbType.VarChar).Value = txtUser.Text
cmd.Parameters.Add("@Game_Name", SqlDbType.VarChar).Value = txtGame.Text
cmd.Parameters.Add("@Score", SqlDbType.VarChar).Value = txtScore.Text
cmd.Parameters.Add("@Time/Date", SqlDbType.DateTime).Value = txtDate.Text
cmd.ExecuteNonQuery()
MessageBox.Show("Data Update successfully")
con.Close()
Catch ex As System.Exception
MessageBox.Show("Data Update has failed")
End Try
End Sub
代码提供的异常是ArgumentException,还有:不支持的关键字:'provider'。
答案 0 :(得分:3)
您正在使用Access。无法使用System.Data.SqlClient中的类打开此数据库。当您要连接到Sql Server,Sql Server Express或LocalDB时,将使用这些类。
如果要访问MSAccess数据库,则需要System.Data.OleDb中的类,这些类是OleDbConnection,OleDbCommand等...
说,请注意,您的现场日期/时间会让您头疼。更改该名称或在其周围放置方括号,因为/将被解释为除法运算符
所以你的代码可能是:
Using con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Comp-296\Project1\Project1\Game_time.mdb")
Using cmd = new OleDbCommand("UPDATE User_Name
SET User_Name = @User_Name,
Game_Name = @Game_Name,
Score = @Score, [Time/Date] = @dt", con)
con.Open()
cmd.Parameters.Add("@User_Name", OleDbType.VarWChar).Value = txtUser.Text
cmd.Parameters.Add("@Game_Name", OleDbType.VarWChar).Value = txtGame.Text
cmd.Parameters.Add("@Score", OleDbType.VarWChar).Value = txtScore.Text
cmd.Parameters.Add("@dt", OleDbType.Date).Value = Convert.ToDateTime(txtDate.Text)
cmd.ExecuteNonQuery()
MessageBox.Show("Data Update successfully")
End Using
End Using
其他说明: 连接和命令等一次性对象应包含在使用声明中,以便尽快处理和关闭 时间字段需要DateTime值而不是字符串。如果您传递一个字符串,您将面对引擎进行的自动转换,有时引擎无法从您的输入字符串生成有效日期。这将引发另一个异常(DataType不匹配)。在传递之前更好地检查并转换值。
参数的类型也应来自OleDbType枚举。