2016-12-29 90 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

相关问题