Sheraz M Ответов: 2

Код выполняется без каких-либо ошибок, но база данных не обновляется


Код выполняется без каких-либо ошибок, но база данных не обновляется.

Что я уже пробовал:

тот же запрос я запускаю в sql и успешно его выполняю. Я попытался присвоить значение datagrid напрямую, а также попытался сохранить это значение в переменной, а затем поместить его в запрос.
Вот мой код.

'generating transaction ID
 Dim dateAndTime As Date = Now
 Dim tra_id As Long = Format(dateAndTime, "ddHHmm")

 'inserting into database
 db_connect.Open()
 Dim indate As Date = System.DateTime.Today
 Dim R_index As Integer
 For R_index = 0 To dataGrid_incoming.Rows.Count - 2


     Dim tempLot As String = dataGrid_incoming.Rows(R_index).Cells(1).Value.ToString
     Dim temptot As String = dataGrid_incoming.Rows(R_index).Cells(2).Value.ToString
     Dim tempqty As Integer = dataGrid_incoming.Rows(R_index).Cells(3).Value
     Dim tempdet As String = dataGrid_incoming.Rows(R_index).Cells(4).Value.ToString

     Dim cmd As SqlClient.SqlCommand = db_connect.CreateCommand()
     cmd.CommandText = "Insert into item (tra_id, lot_no, totul ,qty , tra_status ) Values(" & tra_id & ", '" & tempLot & "', '" & temptot & "'," & tempqty & ", 'In_coming')"
     ' cmd.CommandText = "Insert into item (tra_id, lot_no, totul ,qty , tra_status ) Values(" & tra_id & ", '" & dataGrid_incoming.Rows(R_index).Cells(1).Value.ToString & "', '" & dataGrid_incoming.Rows(R_index).Cells(2).Value.ToString & "'," & dataGrid_incoming.Rows(R_index).Cells(3).Value & ", 'In_coming')"

     Dim cmd2 As SqlClient.SqlCommand = db_connect.CreateCommand()
     cmd2.CommandText = "Insert into item_in (cus_id , tra_id , in_date ,in_detail) Values(" & cs_id & ", " & tra_id & ", " & indate & ", '" & tempdet & "')"
     'cmd2.CommandText = "Insert into item_in (cus_id , tra_id , in_date ,in_detail) Values(" & cs_id & ", " & tra_id & ", " & indate & ", '" & dataGrid_incoming.Rows(R_index).Cells(4).Value.ToString & "')"

 Next

 db_connect.Close()
 dataGrid_incoming.Rows.Clear()

2 Ответов

Рейтинг:
10

CHill60

Если вы используете параметризованный запрос, то sql, вероятно, будет работать - см. indate Это дата, но в окончательном sql-операторе вокруг нее нет одинарных кавычек.

Однако sql будет работать только в том случае, если вы действительно запустите его. Вы пропускаете звонки на Метод ExecuteNonQuery[^] - по одному для каждого cmd и cmd2


Рейтинг:
1

Patrice T

cmd2.CommandText = "Insert into item_in (cus_id , tra_id , in_date ,in_detail) Values(" & cs_id & ", " & tra_id & ", " & indate & ", '" & tempdet & "')"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


CHill60

5 б. На самом деле это также частично решило бы проблему ОП - см. мое решение

Patrice T

спасибо.
На самом деле я даже не пытался угадать, что не так, потому что только результирующая строка или сообщение об ошибке на сервере действительно могут помочь.