VB.NET 将 DataGridVIew 内容插入 SQL Server 表

Posted

技术标签:

【中文标题】VB.NET 将 DataGridVIew 内容插入 SQL Server 表【英文标题】:VB.NET Insert DataGridVIew content into SQL Server table 【发布时间】:2021-11-01 06:08:57 【问题描述】:

我在将 datagridview 中的数据插入 SQL Server 表时遇到问题

我得到的错误是这样的:

System.Data.SqlClient.SqlException:参数化查询“(@Articulo varchar(8000),@Cantidad varchar(8000),@Precio varchar”需要参数“@Articulo”,但未提供该参数。

我的代码:

Private Sub btnGetTotal_Click(sender As Object, e As EventArgs) Handles btnGetTotal.Click
    Dim connection As SqlConnection = New SqlConnection("xxx")
    Dim command As SqlCommand = New SqlCommand("INSERT INTO Ordenes_Full (Articulo, Cantidad, Precio) VALUES (@Articulo, @Cantidad, @Precio)")
    Dim dataAdapter As New Data.SqlClient.SqlDataAdapter
    Dim dataSet As New Data.DataSet

    command.Parameters.Add("@Articulo", SqlDbType.VarChar)
    command.Parameters.Add("@Cantidad", SqlDbType.VarChar)
    command.Parameters.Add("@Precio", SqlDbType.VarChar)

    connection.Open()
    command.Connection = connection

    For i As Integer = 0 To DataGridView1.Rows.Count - 1
        command.Parameters(0).Value = DataGridView1.Rows(i).Cells(0).Value
        command.Parameters(1).Value = DataGridView1.Rows(i).Cells(1).Value
        command.Parameters(2).Value = DataGridView1.Rows(i).Cells(2).Value
        command.ExecuteNonQuery()
    Next
 
End Sub

【问题讨论】:

对于空值,您需要DbNull.Value 所以If(DataGridView1.Rows(i).Cells(0).Value, DbNull.Value) 等。我强烈建议您清除此代码并改用SqlBulkCopydataAdapterdataSet 服务的目的是什么? DataGridView 是如何填写的。 DataTable 是否用作 DataSource The parameterized query '(@Articulo varchar(8000) 这应该给你一个线索,通常是有问题的。指定参数的长度。他们是 真的 varchar 吗? Cantidad(数量)是数字吗?如果不是,它应该是数字吗?坏习惯很难改掉。 你根本不应该这样循环。您应该首先将DataTable 绑定到网格,然后使用数据适配器通过调用Update 一次性保存数据。您将设置该数据适配器的InsertCommand 并为每个参数设置源列。这将自动处理“空”单元格,因为默认情况下DataTable 将在这些字段中包含DBNull.Value 【参考方案1】:

我建议这样做完全不同,正如我在对该问题的评论中所建议的那样。但是,如果您要坚持使用此方法,则必须确保将“空”单元格作为NULL 保存到数据库中。你可以这样做:

command.Parameters(0).Value = If(DataGridView1.Rows(i).Cells(0).Value, DBNull.Value)

这将使用单元格的Value,除非它是Nothing,在这种情况下它将使用DBNull.Value

DBNull.Value 是 ADO.NET 用来表示数据库 NULL 的东西。它不能只使用 Nothing 的原因是因为 ADO.NET 是在可空值类型之前创建的。如果您使用了Nothing,例如,应该是Integer,那么它将被解释为0,而不是NULL

【讨论】:

以上是关于VB.NET 将 DataGridVIew 内容插入 SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章

vb.net Datagridview添加行

如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

vb.net如何查询DataGridView中数据,然后把查询到的内容显示到listview中

vb.net datagridview中的列的操作

Datagridview vb.net中的组合框

Vb.net 编辑 DatagridView