2017-04-12 10 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 

このコードでは、Exceptionには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値が必要です。文字列を渡すと、エンジンによる自動変換に直面し、エンジンが入力文字列から有効な日付を生成できないことがあります。これにより、もう1つの例外(データ型の不一致)が発生します。それを渡す前に値をチェックして変換する方が良い。

また、パラメータの型はOleDbType列挙型である必要があります。

+0

を使用する必要があります。エラー 'DateTime'はSystem.Data.OleDb.OleDbTypeのメンバーではありません。 ExecuteNonQuery:接続プロパティが初期化されていません。 –

+0

これはちょうどOleDbType.Dateです – Steve

+1

ExecuteNonQuery:接続プロパティが初期化されていません。私は例外を取得しています –

関連する問題