2016-06-02 2 views
0

У меня есть таблица базы данных Access, которой нравится приложение vb.net.
И мне нужно обновить все строки разным значением для каждой строки!
Таблица Перед Update:Обновить все строки с разными значениями

 Column1 | Column2 | Column3 
    abc1 | 123 | 
    abc2 | 345 

**Table After Update:** 
Column1 | Column2 | Column3 
abc1 | 123 | x 
abc2 | 345 | y

Я использую этот код:

For i = 0 To dgv.Rows.Count - 1 
     Dim expDate As Date = dgv.Rows(i).Cells(6).Value 
     dgv.Rows(i).Cells(8).Value = DateDiff(DateInterval.Day, Today.Date, expDate) 
     Dim conn1 As OleDbConnection = New OleDbConnection(constroledb) 
     Dim cmd1 As New OleDbCommand 
     conn1.Open() 
     cmd1.Connection = conn1 
     cmd1.CommandText = "update tblvac set fld1 = '" & dgv.Rows(i).Cells(8).Value & "' where vid = '" & dgv.Rows(i).Cells(0).Value & "' " 
     cmd1.ExecuteNonQuery() 
     cmd1.Dispose() 
     conn1.Close() 
Next 

Может кто-нибудь помочь, как сделать это?

+0

Связано ли ваше dgv? Нет необходимости создавать новое соединение в цикле - то же самое будет работать для каждой строки, вы также должны использовать параметры SQL, если вы обновите/вставляете вручную. – Plutonix

+0

да, это ограничено, можете ли вы объяснить больше, пожалуйста? – Ayden

+0

Если он привязан, любые новые значения, введенные в DGV, должны быть автоматически перенесены в базовый тип данных. Затем вы должны действовать в строках данных, которые не выводят данные из строки DGV подряд за строкой. – Plutonix

ответ

0

Я согласен с Plutonix, соединение, которое вы можете держать открытым и не иметь в своем цикле. Я полагаю, что у вас могут возникнуть проблемы в предложении where в sql-вставке на идентификаторе, который не будет должным образом обновляться. попробуйте это:

Using conn1 As New OleDb.OleDbConnection(constroledb) 
     conn1.Open() 
     For i As Integer = 0 To dgv.Rows.Count - 1 
      Dim expDate As Date = dgv.Rows(i)(6) 
      dgv.Rows(i)(8) = DateDiff(DateInterval.Day, Today.Date, expDate) 
      Dim cmd1 As New OleDb.OleDbCommand 
      cmd1.Connection = conn1 
      cmd1.CommandType = CommandType.Text 
      cmd1.CommandText = "UPDATE tblvac SET fld1 = @fld1 WHERE vid = @vid" 
      cmd1.Parameters.AddWithValue("@fld1", dgv.Rows(i)(8)) 
      cmd1.Parameters.AddWithValue("@vid", dgv.Rows(i)(0)) 
      cmd1.ExecuteNonQuery() 
      cmd1.Dispose() 
     Next 
    End Using 

Я переместил подключение к используя так будет закрывать, когда цикл выполняется, а затем параметризовать запрос таким образом, что это позволит экземпляры специальных символов в строках, а не бросать SQL от

+0

спасибо @Peter George, вы просто закончили 6 часов работы! – Ayden

Смежные вопросы