Вставить добавление дополнительной строки в базу данных

#vb.net #ado.net

#vb.net #ado.net

Вопрос:

Когда я вставляю данные из моего datagridview в свою базу данных, в конце вставляется дополнительная строка, которая не содержит данных. Как я могу преодолеть эту проблему. Каждый раз, когда я нажимаю на новую строку в моем datagridview и начинаю вводить данные, новая строка включается ниже. Есть ли какой-либо способ остановить вставку этой пустой строки в мою базу данных? Спасибо, вот мой код…

                     Dim ds As New DataSet 
                    ds.Tables.Add("Main") 

                   Dim col As New DataColumn 

                    Dim dgvCol As New DataGridViewColumn 
                    For Each dgvCol In DataGridView1.Columns 
                        col = New DataColumn(dgvCol.Name) 
                        ds.Tables("Main").Columns.Add(col) 
                    Next 
                    Dim row As DataRow 
                    Dim colcount As Integer = DataGridView1.Columns.Count - 1 

                    For i As Integer = 0 To DataGridView1.Rows.Count - 1 
                        row = ds.Tables("Main").Rows.Add 

                        For Each column As DataGridViewColumn In DataGridView1.Columns 
                            row.Item(column.Index) = DataGridView1.Rows.Item(i).Cells(column.Index).Value 
                        Next 

                    Next 


                    Dim con As New SqlClient.SqlConnection 
                    Dim myCommand As New SqlClient.SqlCommand 

                    Dim dt As New DataTable() 
                    dt = ds.Tables("Main") 

                    For i As Integer = 0 To dt.Rows.Count - 1 

                        Dim myAdapter As New SqlClient.SqlDataAdapter 
                        Dim sql As String = "Insert into details (company, division, date, supplier, material_group, cost, dsc, email, userID, fullName, marketingCode, hccNumber, wbs, qty, currency, timestamp) VALUES ('" amp; DataGridView1.Rows(i).Cells(company.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(division.Name).Value amp; "','" amp; calendar amp; "', '" amp; DataGridView1.Rows(i).Cells(supplier.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(materialGroup.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(netprice.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(description.Name).Value amp; "', '" amp; cmbEmail.SelectedValue amp; "', '" amp; id amp; "', '" amp; newName amp; "', '" amp; DataGridView1.Rows(0).Cells(markCodes.Name).Value amp; "', '" amp; DataGridView1.Rows(0).Cells(hccNumber.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(wba.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(quantity.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(currency.Name).Value amp; "', '" amp; nowDate amp; "')" 
                        myCommand.Connection = con 
                        myCommand.CommandText = sql 
                        myAdapter.InsertCommand = myCommand 
                        myCommand.Connection.Open() 
                        myCommand.ExecuteNonQuery() 
                        myCommand.Connection.Close() 

                    Next.
  

Ответ №1:

Вам нужно будет проверить вашу строку на наличие значений в вашем цикле, попробуйте проверить каждую ячейку (или конкретную ячейку) на DBNull.Значение перед его сохранением. В качестве альтернативы вы можете установить для allowuserstoaddrow значение false, чтобы предотвратить отображение пустой строки.

Комментарии:

1. Спасибо, я уже пробовал AllowUserToAddRows = False , но когда я это сделал, я вообще не смог добавить никаких строк, оставив меня с пустым gridview.

2. Хорошо, тогда вам нужна проверка DBNull.

Ответ №2:

Добавьте проверку внутри цикла Смотрите пример кода ниже

 For Each rw As DataGridViewRow In Form1.DataGridView1.Rows

            If rw.Cells("Column2").Value <> Nothing Then

                ITM_ID = rw.Cells("Column1").Value
                DSPL_RCT = rw.Cells("Column2").Value
                SLS_QTY = rw.Cells("Column3").Value
                SLS_PRC = rw.Cells("Column4").Value
                SLS_AMT = rw.Cells("Column5").Value
                TAX_CODE = rw.Cells("Column6").Value

                'INSERT A RECORD INTO THE DATABASE

                Dim cmd As New SqlCommand("INSERT INTO DAY_PLUSALES (DT,ITM_ID,DSPL_RCT,SLS_QTY,SLS_PRC,SLS_AMT,TAX_CODE) values ('" amp; Form1.TextBox6.Text amp; "','" amp; ITM_ID amp; "','" amp; DSPL_RCT amp; "','" amp; SLS_QTY amp; "','" amp; SLS_PRC amp; "','" amp; SLS_AMT amp; "','" amp; TAX_CODE amp; "')", con)

                 cmd.ExecuteNonQuery()

End If

        Next