2016-05-24 14 views
-1

大きな問題があります。データベースを更新すると、挿入すると情報が挿入されない..... vb.net

データベースを更新すると、情報がデータベースに挿入されません。しかし、情報をデータベースに挿入すると、更新されません。

これは私が挿入するが、それは動作しませんしようとしたデータベース、更新のみを更新するときに私が使用するコードです:しようと、

provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\311026\Documents\PAP3\Biblio.accdb" 
    connString = provider 
    myConnection.ConnectionString = connString 
    myConnection.Open() 
    Dim str As String 

    str = "Insert into Livrosrequisitar([NomeLivro], [AutorLivro], [EditoraLivro], [AnoLivro], [Nome_Aluno], [Ano_Aluno], [Turma_Aluno], [Contacto_Aluno], [Email_Aluno], [DataRequicicao], [RetornoRequicicao]) Values (?,?,?,?,?,?,?,?,?,?,?)" 
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 

    cmd.Parameters.Add(New OleDbParameter("NomeLivro", CType(TextBox11.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("AutorLivro", CType(TextBox4.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("EditoraLivro", CType(TextBox5.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("AnoLivro", CType(TextBox6.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Nome_Aluno", CType(TextBox10.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Ano_Aluno", CType(TextBox9.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Turma_Aluno", CType(TextBox8.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Contacto_Aluno", CType(TextBox13.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Email_Aluno", CType(TextBox12.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("DataRequicicao", CType(DateTimePicker1.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("RetornoRequicicao", CType(DateTimePicker2.Text, String))) 

    cmd = New OleDb.OleDbCommand("UPDATE Livrosescola SET Quantidade = Quantidade - 1 Where NomeLivro like'%" & ListBox1.SelectedValue & "%'", myConnection) 
    ListBox1.Refresh() 

    Try 
     cmd.ExecuteNonQuery() 
     cmd.Dispose() 
     myConnection.Close() 
     TextBox11.Clear() 
     TextBox4.Clear() 
     TextBox5.Clear() 
     TextBox6.Clear() 
     TextBox10.Clear() 
     TextBox9.Clear() 
     TextBox8.Clear() 
     TextBox13.Clear() 
     TextBox12.Clear() 
     TextBox9.Clear() 

     MessageBox.Show("Registo inserido!", "Registo inserido", MessageBoxButtons.OK, MessageBoxIcon.Information) 

    Catch ex As Exception 
     MessageBox.Show("Erro!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 

    listbox() 

私は情報を挿入したとき、私が使用したコードです更新するには、コードを挿入するだけです。

provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\311026\Documents\PAP3\Biblio.accdb" 
    connString = provider 
    myConnection.ConnectionString = connString 
    myConnection.Open() 
    Dim str As String 

    str = "Insert into Livrosrequisitar([NomeLivro], [AutorLivro], [EditoraLivro], [AnoLivro], [Nome_Aluno], [Ano_Aluno], [Turma_Aluno], [Contacto_Aluno], [Email_Aluno], [DataRequicicao], [RetornoRequicicao]) Values (?,?,?,?,?,?,?,?,?,?,?)" 
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 


    cmd.Parameters.Add(New OleDbParameter("NomeLivro", CType(TextBox11.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("AutorLivro", CType(TextBox4.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("EditoraLivro", CType(TextBox5.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("AnoLivro", CType(TextBox6.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Nome_Aluno", CType(TextBox10.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Ano_Aluno", CType(TextBox9.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Turma_Aluno", CType(TextBox8.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Contacto_Aluno", CType(TextBox13.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("Email_Aluno", CType(TextBox12.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("DataRequicicao", CType(DateTimePicker1.Text, String))) 
    cmd.Parameters.Add(New OleDbParameter("RetornoRequicicao", CType(DateTimePicker2.Text, String))) 



    Try 
     cmd.ExecuteNonQuery() 
     cmd.Dispose() 
     myConnection.Close() 
     TextBox11.Clear() 
     TextBox4.Clear() 
     TextBox5.Clear() 
     TextBox6.Clear() 
     TextBox10.Clear() 
     TextBox9.Clear() 
     TextBox8.Clear() 
     TextBox13.Clear() 
     TextBox12.Clear() 
     TextBox9.Clear() 

     MessageBox.Show("Registo inserido!", "Registo inserido", MessageBoxButtons.OK, MessageBoxIcon.Information) 

    Catch ex As Exception 
     MessageBox.Show("Erro!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 

    cmd = New OleDb.OleDbCommand("UPDATE Livrosescola SET Quantidade = Quantidade - 1 Where NomeLivro like'%" & ListBox1.SelectedValue & "%'", myConnection) 
    ListBox1.Refresh() 

    listbox() 

私が同時に同じことをしたいが、それは動作しません...

あなたは私を助けることができれば...

ありがとうございます!

+0

後に不足しているあなたは無用のtryキャッチを持っています。あなたが本当に例外をキャッチしたいのであれば、メッセージを印刷します。 _MessageBox.Show( "エラー:"&ex.Message、....)エラーメッセージの内容を教えてください – Steve

+0

コードのInsert部分にExecuteNonQueryを呼び出すことを忘れてしまった – Steve

+0

こんにちは、ありがとうございます:) –

答えて

2

何かを実行するにはコマンドを実行する必要があります。

コードの両方の例では、コマンドテキストの1つのみに対してExecuteNonQueryを呼び出し、他のコードでは使用しません。最初の例で

ちょうどこの行を追加します。2番目の例では

...... 
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 

Try 
    ' Add this (and move the start of the Try catch before this line' 
    cmd.ExecuteNonQuery() 

    cmd.Parameters.Add(New OleDbParameter("NomeLivro", CType(TextBox11.Text, String))) 
    .... 
Catch ex as Exception 
    MessageBox.Show("Error:" & ex.Message) 
End Try 

あなたは同じ問題を抱えているが、のExecuteNonQueryは最後のOleDbCommand作成

+1

スティーブ、私はこれが奇妙だと知っていますが、私はちょうどあなたに叫び声をあげたいと思っています。私はいつもあなたの答えを読むのが楽しいです:) – Werdna

関連する問題