2013-12-26 3 views
0

У меня возникли проблемы с получением моего запроса sql для вставки данных в db доступа. Если я запустил запрос в представлении sql в доступе, он вставляет все в порядке, поэтому, я думаю, это оставляет ошибку в моем коде. Я уверен, что сделал фундаментальную ошибку и был бы признателен, если бы кто-нибудь мог указать на это. БлагодаряSql insert query not inserting

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 

     Try 

     DBConnection.connect() 

      sql = "SELECT MAX([Request no]) from Requests WHERE Customer = '" & cmbCustomer.Text & "' " 

      Dim cmd As New OleDb.OleDbCommand 

      Dim id As String 
      Dim requestor As String = "BT" 
      Dim intake As String = "I" 
      Dim status As String = "O" 

     'cmd.Parameters.AddWithValue("@p1", cmbCustomer.Text) 

      cmd.CommandText = sql 
      cmd.Connection = oledbCnn 
      dr = cmd.ExecuteReader 

     While dr.Read() 

       id = CStr(dr.Item(0)) 
       id = CStr(CDbl(id) + 1) 


      End While 

      sql = "INSERT INTO Requests ([Request no], Customer, Dept, Type, [Service level], [Date-time received], [Received by], [Date-time due], Quantity, [Cust requestor], Status) " & 
      "VALUES ('" & id & "', '" & cmbCustomer.Text.ToUpper & "', '" & cmbDept.Text & "', '" & intake.ToString & "', '" & rbServiceLevel.ToString & "', NOW(), '" & requestor.ToString & "', '" & dtpDateDue.Value & "', '" & txtBoxQuantity.Text & "', '" & requestor.ToString & "', '" & status & "')" 

      cmd.Dispose() 
      dr.Close() 
      oledbCnn.Close() 

     Catch ex As Exception 

      MessageBox.Show(ex.Message) 

     End Try 

    End Sub 

БДСВЯЗЬ

Imports System.Data.OleDb 

Module DBConnection 

    Public connetionString As String = My.Settings.storageConnectionString 
    Public oledbCnn As New OleDbConnection 
    Public oledbCmd As OleDbCommand 
    Public dr As OleDbDataReader 
    Public sql As String 

    Sub connect() 

     'connetionString = My.Settings.storageConnectionString 
     oledbCnn.ConnectionString = connetionString 
     oledbCnn.Open() 

    End Sub 

End Module 
+1

Вы не выполняете свой запрос INSERT, просто строя его –

+0

Как изменить код Yuriy. Спасибо – user1532468

+0

Вам нужно научиться использовать параметры, чтобы избежать инъекции SQL. – LarsTech

ответ

2

Вы проблема заключается в том, что вы создаете SQL запрос, но на самом деле не выполняет его. Попробуйте это:

 End While 

     dr.Close() 

     sql = "INSERT INTO Requests ([Request no], Customer, Dept, Type, [Service level], [Date-time received], [Received by], [Date-time due], Quantity, [Cust requestor], Status) " & _ 
     "VALUES ('" & id & "', '" & cmbCustomer.Text.ToUpper & "', '" & cmbDept.Text & "', '" & intake.ToString & "', '" & rbServiceLevel.ToString & "', NOW(), '" & requestor.ToString & "', '" & dtpDateDue.Value & "', '" & txtBoxQuantity.Text & "', '" & requestor.ToString & "', '" & status & "')" 

     cmd.CommandText = sql 
     cmd.ExecuteNonQuery() 

     cmd.Dispose() 
     oledbCnn.Close() 

    Catch ex As Exception 

Но слушать @LarsTech - при построении команды SQL вид для parametrized query вместо строки concatination в противном случае вы ответственность за SQL Injection (кто-то может подменить данные в Textboxes и привести к потере данных)

Сторона примечания: если вы возвращаете одно значение из БД - вместо ExecuteReader ищите ExecuteScalar.

+0

Yuriy Это ошибки с: текст команды не был установлен для объекта команды. – user1532468

+0

Пожалуйста, проверьте, что является значением 'cmd.CommandText' перед выполнением' cmd.ExecuteNonQuery() '- убедитесь, что это действительная команда INSERT –

+0

cmd.CommandText показывает правильные значения вставки sql. – user1532468