2016-12-29 3 views
0

Это мой код, который сначала вставляет данные в datagridview, а затем в базу данных.Как вставить дату в SQL Server с помощью vb.net

Когда я запускаю код, я получаю ошибку

операнд типа столкновения бит несовместим с датой

Может кто-нибудь мне помочь?

Заранее спасибо

populate(txtRejectID.Text, comboBoxCardType.Text, txtEmbossName.Text, txt6CardNum.Text, txt4CardNum.Text, txtQuantity.Text, comboBoxErrorDesc.Text, embossDate.Text, txtStatus.Text) 

    For Each row As DataGridViewRow In DataGridView1.Rows 
      Dim query As String = "INSERT INTO dbo.RejectCard VALUES (@RejectID, @Card_Type, @Emboss_Name, @Card_Number, @Quantity, @Error_Description, @Emboss_Date, @Status)" 

     Using conn As New SqlConnection(connString) 
      Using cmd As New SqlCommand(query, conn) 

       cmd.Parameters.AddWithValue("@RejectID", row.Cells("rejectid").Value) 
       cmd.Parameters.AddWithValue("@Card_Type", row.Cells("cardtype").Value) 
       cmd.Parameters.AddWithValue("@Emboss_Name", row.Cells("embossname").Value) 
       cmd.Parameters.AddWithValue("@Card_Number", row.Cells("cardnumber").Value) 
       cmd.Parameters.AddWithValue("@Quantity", row.Cells("quantity").Value) 
       cmd.Parameters.AddWithValue("@Error_Description", row.Cells("errordescription").Value) 
       cmd.Parameters.AddWithValue("@Emboss_Date", row.Cells("emboss_Date").Value = embossDate.Value.Date.ToString("dd/MM/yyyy")) 
       cmd.Parameters.AddWithValue("@Status", row.Cells("status").Value) 

       Try 
        conn.Open() 
        cmd.Connection = conn 
        cmd.ExecuteNonQuery() 

       Catch ex As Exception 
        MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records") 
       Finally 
        conn.Close() 
       End Try 
      End Using 
     End Using 
    Next 

    MessageBox.Show("Records inserted.") 
End Sub 
+1

сделать список столбцов в Insert, который ссылается на список значений, в том же порядке, что и значения. Это лучшая практика, хотя ... –

+1

Там так много неправильно, что я изо всех сил пытаюсь понять, с чего начать. Зачем вам создавать новое соединение для каждой записи? Вы даже не должны создавать новую команду для каждой записи. Если вы решили вызвать 'ExecuteNonQuery', тогда вы должны создать одно соединение и одну команду, добавив все пареметры, открыв соединение и THEN, начиная цикл. В цикле вы устанавливаете значение «Значение» для каждого параметра и затем выполняете вызов. Еще лучше, просто создайте «DataTable» и привяжите его к сетке, затем сохраните лот с помощью одного вызова «Update». – jmcilhinney

+0

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

ответ

2

Вы вставляете даты точно так же, как вы вставить что-нибудь еще. Проблема в том, что вы не вставляете Date. Вы вставляете Boolean. Посмотрите на свой код. Это значение, которое вы ввели:

row.Cells("emboss_Date").Value = embossDate.Value.Date.ToString("dd/MM/yyyy") 

Это сравнение равенства. Результатом сравнения равенства всегда является Boolean, то есть True, если значения равны и False, если они не являются. Если вы хотите вставить Date, укажите Date, а не сравнение между значением из строки сетки и String.

Почему вы просто не делаете для этого параметра то, что вы делаете для всего остального? Вы явно думаете, что добиваетесь чего-то там, но я могу заверить вас, что вы этого не делаете. Если то, что вы пытаетесь сделать, это отбросить время из вашего значения DateTime, тогда вы сделаете это, получив свойство Date, а не путем преобразования Date в String.

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