2016-12-29 89 views
0

這是我的代碼,它會先將數據插入到datagridview中,然後再插入到數據庫中。如何使用vb.net將日期插入到SQL Server中

當我運行代碼,我得到的錯誤

數類型衝突位與日期不符

誰能幫助我?

在此先感謝

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

確實在插入引用的值列表中列出與值相同的順序。這是最好的做法,雖然... –

+1

有那麼多的錯誤,我正在努力找出從哪裏開始。爲什麼你會爲每個記錄創建一個新的連接?你甚至不應該爲每個記錄創建一個新的命令。如果你決定調用'ExecuteNonQuery',那麼你應該創建一個連接和一個命令,添加所有的參數,打開連接,然後開始循環。在循環中,您設置每個參數的「Value」,然後調用並執行。更好的是,創建一個'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

相關問題