【问题标题】:How to Use forloop inside the list of sqlparameter?如何在sql参数列表中使用for循环?
【发布时间】:2020-07-16 10:27:59
【问题描述】:

如何使用 dal 将我的数据 gridview 值添加到数据库中,我的代码是这样的

Dim list As New List(Of SqlParameter)

For each row as DataGridView In DataGridView1.Rows
    If row.cell(0).value isnot nothing
        Qry="insert into sale1(Description)values(@1)"
        With list
           .add(new Sqlparameter("@1",row.cells(2).value)
        End with
    End if
Next

【问题讨论】:

  • 应该是For each row as DataGridViewRow
  • 你为什么使用List(Of SqlParameter)
  • 为什么要使用循环?如果您将DataTable 绑定到网格,那么您只需在数据适配器上调用Update 即可保存该批次。
  • 我做数据访问层并在这里用作实例..
  • 请用代码thanx解释一下

标签: asp.net vb.net desktop-application


【解决方案1】:

如果您不想按照 cmets 中的 @jmcilhinney 建议的那样做(最好的方法),这应该与您提供的代码最接近,但它不会将数据库代码与用户界面代码分开。

这个想法是在循环外添加一次参数,然后在循环中更改值。我不得不猜测参数的数据类型和大小。请检查您的数据库并更正代码。

Private Sub OPCode2()
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand("insert into sale1 (Description)values(@1)", cn)
        cmd.Parameters.Add("@1", SqlDbType.NVarChar, 300)
        cn.Open()
        For Each row As DataGridViewRow In DataGridView1.Rows
            If row.Cells(0).Value IsNot Nothing Then
                cmd.Parameters("@1").Value = row.Cells(2).Value
                cmd.ExecuteNonQuery()
            End If
        Next
    End Using
End Sub

要分离代码...

Private Sub UICode()
    Dim lst As New List(Of String)
    For Each row As DataGridViewRow In DataGridView1.Rows
        If row.Cells(0).Value IsNot Nothing Then
            lst.Add(row.Cells(2).Value.ToString)
        End If
    Next
    UpdateDatabase(lst)
End Sub

Private Sub UpdateDatabase(lst As List(Of String))
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand("insert into sale1 (Description)values(@1)", cn)
        cmd.Parameters.Add("@1", SqlDbType.NVarChar, 300)
        cn.Open()
        For Each s As String In lst
            cmd.Parameters("@1").Value = s
            cmd.ExecuteNonQuery()
        Next
    End Using
End Sub

【讨论】:

  • 感谢有价值的回复或回答
  • 不,你可以有一个变量 Private ConString = "????"在类级别并使用变量传递给 Connection 的构造函数。不要使用类连接。使您与使用它们的方法保持本地连接,以便可以关闭和处置它们。这对于允许连接返回池并防止内存泄漏很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多