使用ConnectionString将表从vb更新为Access

时间:2017-04-12 19:24:12

标签: vb.net

 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'。

1 个答案:

答案 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枚举。