468,140 Members | 1,454 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,140 developers. It's quick & easy.

OleDbException was unhandled: Number of query values and destination fields are not t

Dear fellow programmers,

I am coping with this problem for 6 days already and nearly gonna give up. All I want is when I click the 'Save' button it will add to the database and datagridview. This is my following code:

In Module 2:

Expand|Select|Wrap|Line Numbers
  1. Module Module2
  2.     Public con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\EncodingComplete.accdb")
  3. End Module
  4.  
In frmEncode:
Expand|Select|Wrap|Line Numbers
  1. Public Class frmEncode
  2.     Public Sub Add_Data()
  3.  
  4.         con.Open()
  5.  
  6.         Dim rs As New OleDb.OleDbCommand("Insert Into EncodingComplete(Client, Address, Date_Bill, BusStyle_Name, Vessel, TIN, Port, [Pier No], InterPleader1, InterPleader2, Call_Date, Call_Time, Call_VoyageNo, Call_ReceiveBy, VesselType, VesselCalls, FixedFee_ExcessCum, FixedFee_Amount, FixedFee_Rate, FixedFee_Total, OilyExcessCum, OilyRate, OilyAmnt, OilyTotal, GarbageExcessCum, GarbageRate, GarbageAmnt, GarbageTotal, NoxiousExcessCum, NoxiousRate, NoxiousAmnt, NoxiousTotal, Other, OtherExcessCum, OtherRate, OtherAmnt, OtherTotal, DollarConvers, AmountDue, PaymentDetails, TypeofPayment, DateofPayment, OrNo, Amount, Collector, BI, CSR) VALUES('" & ComboBoxEx1.Text & "', '" & TextBoxX1.Text & "', '" & DateTimePicker1.Text & "', '" & TextBoxX11.Text & "', '" & TextBoxX2.Text & "', '" & TextBoxX3.Text & "', '" & ComboBoxEx2.Text & "', '" & TextBoxX12.Text & "', '" & ComboBoxEx4.Text & "', '" & ComboBoxEx5.Text & "', '" & TextBoxX6.Text & "', '" & TextBoxX9.Text & "', '" & TextBoxX4.Text & "', '" & TextBoxX10.Text & "', '" & ComboBoxEx3.Text & "', '" & ComboBoxEx8.Text & "', '" & TextBoxX14.Text & "', '" & TextBoxX40.Text & "', '" & TextBoxX31.Text & "', '" & TextBoxX49.Text & "', '" & TextBoxX16.Text & "', '" & TextBoxX29.Text & "', '" & TextBoxX38.Text & "', '" & TextBoxX47.Text & "', '" & TextBoxX15.Text & "', '" & TextBoxX30.Text & "', '" & TextBoxX39.Text & "', '" & TextBoxX48.Text & "', '" & TextBoxX17.Text & "', '" & TextBoxX28.Text & "', '" & TextBoxX37.Text & "', '" & TextBoxX46.Text & "', '" & TextBoxX13.Text & "', '" & TextBoxX18.Text & "', '" & TextBoxX8.Text & "', '" & TextBoxX36.Text & "', '" & TextBoxX45.Text & "', '" & TextBoxX50.Text & "', '" & TextBoxX51.Text & "', '" & TextBoxX52.Text & "', '" & ComboBoxEx7.Text & "', '" & TextBoxX53.Text & "', '" & TextBoxX54.Text & "', '" & TextBoxX55.Text & "', '" & TextBoxX56.Text & "')", con)
  7.         rs.ExecuteNonQuery()
  8.         con.Close()
  9.         Display_Data()
  10.     End Sub
  11.  
  12.     Private Sub Display_Data()
  13.         con.Open()
  14.         Dim dt As New DataTable("EncodingComplete")
  15.         Dim rs As New OleDb.OleDbDataAdapter("Select * from EncodingComplete", con)
  16.         rs.Fill(dt)
  17.         DataGridViewX1.DataSource = dt
  18.         DataGridViewX1.Refresh()
  19.  
  20.         rs.Dispose()
  21.  
  22.         con.Close()
  23.  
  24.     End Sub
  25.  
  26.     Private Sub ButtonX10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonX10.Click
  27.         Add_Data()
  28.  
  29.  
  30.     End Sub
  31.  
The error throws at rs.ExecuteNonQuery() which says 'OleDbException was unhandled: Number of query values and destination fields are not the same.'

Please help me. Any suggestions would be appreciated.
Dec 28 '14 #1
1 1481
Frinavale
9,735 Expert Mod 8TB
The Insert statement expects the number of values provided to match the number of columns that you are populating.

This is what you have:
Expand|Select|Wrap|Line Numbers
  1. Insert Into EncodingComplete(
  2. Client, Address, Date_Bill, BusStyle_Name, 
  3. Vessel, TIN, Port, [Pier No], 
  4. InterPleader1, InterPleader2, Call_Date, Call_Time, 
  5. Call_VoyageNo, Call_ReceiveBy, VesselType, VesselCalls, 
  6. FixedFee_ExcessCum, FixedFee_Amount, FixedFee_Rate, FixedFee_Total,
  7. OilyExcessCum, OilyRate, OilyAmnt, OilyTotal, 
  8. GarbageExcessCum, GarbageRate, GarbageAmnt, GarbageTotal, 
  9. NoxiousExcessCum, NoxiousRate, NoxiousAmnt, NoxiousTotal, 
  10. Other, OtherExcessCum, OtherRate, OtherAmnt, 
  11. OtherTotal, DollarConvers, AmountDue, PaymentDetails, 
  12. TypeofPayment, DateofPayment, OrNo, Amount, 
  13. Collector, BI, CSR) 
  14. VALUES('" & ComboBoxEx1.Text & "', '" & TextBoxX1.Text & "', '" & DateTimePicker1.Text & "', '" & TextBoxX11.Text & "', 
  15. '" & TextBoxX2.Text & "', '" & TextBoxX3.Text & "', '" & ComboBoxEx2.Text & "', '" & TextBoxX12.Text & "', 
  16. '" & ComboBoxEx4.Text & "', '" & ComboBoxEx5.Text & "', '" & TextBoxX6.Text & "', '" & TextBoxX9.Text & "', 
  17. '" & TextBoxX4.Text & "', '" & TextBoxX10.Text & "', '" & ComboBoxEx3.Text & "', '" & ComboBoxEx8.Text & "', 
  18. '" & TextBoxX14.Text & "', '" & TextBoxX40.Text & "', '" & TextBoxX31.Text & "', '" & TextBoxX49.Text & "', 
  19. '" & TextBoxX16.Text & "', '" & TextBoxX29.Text & "', '" & TextBoxX38.Text & "', '" & TextBoxX47.Text & "', 
  20. '" & TextBoxX15.Text & "', '" & TextBoxX30.Text & "', '" & TextBoxX39.Text & "', '" & TextBoxX48.Text & "', 
  21. '" & TextBoxX17.Text & "', '" & TextBoxX28.Text & "', '" & TextBoxX37.Text & "', '" & TextBoxX46.Text & "', 
  22. '" & TextBoxX13.Text & "', '" & TextBoxX18.Text & "', '" & TextBoxX8.Text & "', '" & TextBoxX36.Text & "', 
  23. '" & TextBoxX45.Text & "', '" & TextBoxX50.Text & "', '" & TextBoxX51.Text & "', '" & TextBoxX52.Text & "', 
  24. '" & ComboBoxEx7.Text & "', '" & TextBoxX53.Text & "', '" & TextBoxX54.Text & "', '" & TextBoxX55.Text & "', 
  25. '" & TextBoxX56.Text & "')
Notice how there are 47 column names and only 45 values supplied?

This is the root of your problem.


Please note that it is very hard to identify if you what you are supplying as the values to your SQL insert command.

You should be using OleDbCommand.Parameters Property instead. This not only helps with readability and debugging but also avoids SQL insertion attacks and uses cache...

Consider the following:
Expand|Select|Wrap|Line Numbers
  1. Dim cmdText As String = "Insert Into EncodingComplete(Client, Address, Date_Bill, BusStyle_Name, Vessel, TIN, Port, [Pier No], InterPleader1, InterPleader2, Call_Date, Call_Time, Call_VoyageNo, Call_ReceiveBy, VesselType, VesselCalls, FixedFee_ExcessCum, FixedFee_Amount, FixedFee_Rate, FixedFee_Total, OilyExcessCum, OilyRate, OilyAmnt, OilyTotal, GarbageExcessCum, GarbageRate, GarbageAmnt, GarbageTotal, NoxiousExcessCum, NoxiousRate, NoxiousAmnt, NoxiousTotal, Other, OtherExcessCum, OtherRate, OtherAmnt, OtherTotal, DollarConvers, AmountDue, PaymentDetails, TypeofPayment, DateofPayment, OrNo, Amount, Collector, BI, CSR) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
  2. Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
  3. cmd.CommandType = CommandType.Text ‘ The default is CommandType.Text
  4. With cmd.Parameters
  5.   .Add("@Client", OleDbType.VarChar).Value = ComboBoxEx1.Text
  6.   .Add("@Address", OleDbType.VarChar).Value =  TextBoxX1.Text
  7.   '...
  8.   ' Continue adding parameters with values that match...
  9.   ' Please note that the order in which you add your
  10.   ' parameters must match the order of the columns
  11.   ' in your insert statement
  12. End With
  13. cmd.ExecuteNonQuery()
Jan 5 '15 #2

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

3 posts views Thread by Zb Bornemann | last post: by
27 posts views Thread by didacticone | last post: by
1 post views Thread by gcdp | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.