2017-04-12 20 views
3
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'。使用ConnectionString將表從vb更新爲Access訪問

+1

您正在使用Access。您需要使用OleDbConnection(以及OleDb中的所有類) – Steve

回答

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枚舉。

+0

它的意思是:Error'DateTime'不是System.Data.OleDb.OleDbType'的成員。 ExecuteNonQuery:連接屬性尚未初始化。 –

+0

對,它只是OleDbType.Date – Steve

+1

ExecuteNonQuery:連接屬性尚未初始化。我收到一個例外 –