Практическое руководство объекта не задана ссылка на экземпляр объекта
Уважаемые гуру,
Я пытаюсь вставить строки datagridview в таблицу mysql, используя приведенный ниже код vb.net но получая подвергнутую ошибке, не знаю, где я совершаю ошибку? пожалуйста, помогите
Что я уже пробовал:
Try Dim product, qty, price, total, desc, billno As String For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1 If DataGridView1.RowCount > 0 AndAlso DataGridView1.CurrentRow IsNot Nothing Then 'datatype integer product = Convert.ToInt32(Me.DataGridView1.Rows(i).Cells(1).Value.ToString()) 'datatype double qty = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells(2).Value.ToString()) price = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells(3).Value.ToString()) total = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells(4).Value.ToString()) 'datatype varchar desc = Me.DataGridView1.Rows(i).Cells(5).Value.ToString() End If billno = txtbillno.Text sqL = "INSERT INTO `dailysale`(`billno`,`customer_id`, `product_id`, `qty`, `price`, `total`, `description`) VALUES('" & billno & ",''" & txtCustomer.Tag & "', '" & product & "', '" & qty & "', '" & price & "', '" & total & "', '" & desc & "')" Next sqL &= "INSERT INTO `customer_payments`(`customer_id`, `billno`, `cdate`, `bill_amount`, `paid_amount`, `discount`, `ret_amount`, `balance`) VALUES ('" & txtCustomer.Tag & "','" & txtbillno.Text & "','" & DateTimePicker1.Value & "','" & Convert.ToDouble(txtbill_amount.Text) & "','" & Convert.ToDouble(txtpaid_amount.Text) & "','" & Convert.ToDouble(txtdiscount.Text) & "','" & Convert.ToDouble(txtret_amount.Text) & "','" & Convert.ToDouble(txttotalbalance.Text) & "')" ConnDB() cmd = New MySqlCommand(sqL, conn) cmd.ExecuteNonQuery() MsgBox("New Bill successfully created.", MsgBoxStyle.Information, "Create Bill") Catch ex As Exception MsgBox(ex.ToString) Finally cmd.Dispose() conn.Close() End Try
[no name]
Сообщение об ошибке сообщает вам, в чем проблема и где она возникает.
nyt1972
'тип данных integer
продукт = конвертация.ToInt32(Мне.DataGridView1.Ряды(я).Клетки(1).Значение.Метод toString())
'тип данных integer
desc = для меня.DataGridView1.Ряды(я).Клетки(5).Значение.Метод toString()
Показать ошибку в этих двух строках
Richard MacCutchan
Строка (i) или ячейки(1) или (5) не существуют или содержат null.
nyt1972
Ячейки(1) содержат значение t и ячейки(5) тоже. но даже тогда получаю эту ошибку
Richard MacCutchan
Затем используйте свой отладчик, чтобы точно узнать, какой элемент является нулевым в данный момент. Здесь никто не сможет сделать это за тебя.
Richard MacCutchan
С таким плохо написанным кодом это неудивительно. Вы выбираете элементы без какой-либо проверки их достоверности и пытаетесь преобразовать их в числовые типы. Вам нужно научиться писать правильную проверку валидации и использовать правильные параметризованные запросы для операторов SQL. И, наконец, вы публикуете сообщение об успехе, не проверяя, что ваша вставка действительно успешно завершена.
nyt1972
Изменил код на ниже, но теперь записи не хранятся в базе данных
Try ConnDB() cmd = New MySqlCommand(sqL, conn) For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1 sqL = "INSERT INTO `dailysale`(`billno`,`customer_id`, `product_id`, `qty`, `price`, `total`, `description`) VALUES('@billno','@custid''@product', '@qty', '@price', '@total', '@desc')" 'datatype integer With cmd .Parameters.Clear() .Parameters.AddWithValue("@billno", txtbillno.Text) .Parameters.AddWithValue("@custid", txtCustomer.Tag) .Parameters.AddWithValue("@product", Me.DataGridView1.Rows(i).Cells(1).Value) .Parameters.AddWithValue("@qty", Me.DataGridView1.Rows(i).Cells(2).Value) .Parameters.AddWithValue("@price", Me.DataGridView1.Rows(i).Cells(3).Value) .Parameters.AddWithValue("@total", Me.DataGridView1.Rows(i).Cells(4).Value) .Parameters.AddWithValue("@desc", Me.DataGridView1.Rows(i).Cells(5).Value) End With Next sqL &= "INSERT INTO `customer_payments`(`customer_id`, `billno`, `cdate`, `bill_amount`, `paid_amount`, `discount`, `ret_amount`, `balance`) VALUES ('" & txtCustomer.Tag & "','" & txtbillno.Text & "','" & DateTimePicker1.Value & "','" & txtbill_amount.Text & "','" & txtpaid_amount.Text & "','" & txtdiscount.Text & "','" & txtret_amount.Text & "','" & txttotalbalance.Text & "')" cmd.ExecuteNonQuery() MsgBox("New Bill successfully created.", MsgBoxStyle.Information, "Create Bill") Catch ex As Exception MsgBox(ex.ToString) Finally cmd.Dispose() conn.Close() End Try