2017-04-25 11 views
0

サインインフォームを使用してデータベースにデータを挿入しようとしていますが、コードが機能していないようです。エラーは発生せず、コードを実行すると何も起こっていないように見えます。MS Accessデータベースに挿入できません

コード:

Imports System.Data.OleDb 

Public Class Form2 
Dim provider As String 
Dim datafile As String 
Dim connstring As String 
Dim myconnection As OleDbConnection = New OleDbConnection 
Dim Mode As String 

Private Sub btnSignin_Click(sender As Object, e As EventArgs) Handles btnSignin.Click 


    ' Enable the Insert/Update/Delete buttons. 
    btnSignin.Enabled = True 

    ' Test for the Mode of the form and perform the necessary actions accordingly. 
    Select Case Mode 
     Case "INSERT" ' If the mode is INSERT, perform a new record insertion. 
      Try 
       ' Declare the connection and command objects. 
       Dim connection As New OleDb.OleDbConnection 
       Dim command As New OleDb.OleDbCommand 

       ' Set the ConnectionString property and open the database connection. 
       connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;_Name=;_Surname=;_Username=;_Password=;" 
       connection.Open() 

       ' Set the Connection and CommandText properties of the command. 
       command.Connection = connection 
       command.CommandText = "INSERT INTO Users (_Name,_Surname,_Password,_Username) VALUES (@Name,@Surname,@Password,@Username)" 

       ' Declare and initialize the parameters required by the command object. 
       Dim parName = New OleDb.OleDbParameter("@Name", txtName.Text) 
       Dim parSurname = New OleDb.OleDbParameter("@Surname", txtSurname.Text) 
       Dim parUsername = New OleDb.OleDbParameter("@Username", txtUsername.Text) 
       Dim parPassword = New OleDb.OleDbParameter("@Password", txtPassword.Text) 

       ' Add the parameters to the command object. 
       command.Parameters.Add(parName) 
       command.Parameters.Add(parSurname) 
       command.Parameters.Add(parUsername) 
       command.Parameters.Add(parPassword) 

       ' Execute the command. 
       command.ExecuteNonQuery() 

       ' Close the database connection. 
       connection.Close() 

      Catch ex As Exception 
       ' Prompt the user with the exception. 
       MessageBox.Show("Sign In Complete") 
      End Try 
    End Select 
    Me.Hide() 
    Form3.ShowDialog() 
End Sub 
End Class 
+2

何も起こらないと言うことは絶対に間違っています。いつも何かが起こる。あなたが探しているものが起こらないという事実は、何も起こらないということを意味するものではありません。最初にテストするのは 'ExecuteNonQuery'によって返される値です。それがゼロでない場合、コードは正確に動作していて問題はあなたです。 – jmcilhinney

答えて

2

私は、あなたの接続文字列を試みているかわからないんだけど、あなたがこの部分は必要ありません。

;_Name=;_Surname=;_Username=;_Password=; 

代わりに上記を削除:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb; 

接続文字列の詳細については、www.connectionstrings.com/accessを参照してください。

commentsで述べたように、ExecuteNonQuery()によって返された値を調べて、その行が挿入されているかどうかを確認することを検討してください。

MS Accessでは、パラメータの順序は名前ではなく重要です。パラメータを使用するときは、SQLコマンド内で?プレースホルダを使用します。私はまた、データ型を指定するので、OleDbParameter Constructor (String, OleDbType)コンストラクタの使用を検討してください。私の例では、VarCharを使用しましたが、それに応じて変更することができます。

私もUsingの実装を検討します:

マネージドリソースは、あなたの部分の余分なコーディングなし.NET Frameworkのガベージコレクタ(GC)により処分されています。管理対象リソースに「使用」ブロックは必要ありません。ただし、ガーベッジコレクタを待つ代わりに、管理対象リソースの処分を強制するために、Usingブロックを使用することはできます。あなたが見ることができるように

Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;"), 
     cmd As New OleDbCommand("INSERT INTO Users (_Name, _Surname, _Password, _Username) VALUES (?, ?, ?, ?)", con) 

    con.Open() 

    cmd.Parameters.Add(New OleDbParameter("@Name", OleDbType.VarChar)).Value = txtName.Text 
    cmd.Parameters.Add(New OleDbParameter("@Surname", OleDbType.VarChar)).Value = txtSurname.Text 
    cmd.Parameters.Add(New OleDbParameter("@Username", OleDbType.VarChar)).Value = txtUsername.Text 
    cmd.Parameters.Add(New OleDbParameter("@Password", OleDbType.VarChar)).Value = txtPassword.Text 

    Dim rowsAffected As Integer = cmd.ExecuteNonQuery() 

    If rowsAffected = 1 Then 
     MessageBox.Show("Sign In Complete") 
    End If 
End Using 

、全体的なコードは、多くの滑らかな印象があり、読み非常に簡単:

あなたのコードは次のようになります。これがあなたの問題に役立つことを願っています。

これはこの質問の範囲外ですが、私はパスワードの暗号化も見ていきます。プレーンテキストとして保存するのは悪い習慣です。 SOの質問を見てください。 Best way to store password in database、これはあなたにこれを行うにはどのように最善の方法についていくつかのアイデアを与えるかもしれません。

関連する問題