使用SqlDataReader vb.net为每个创建一个

时间:2017-11-10 15:39:35

标签: asp.net vb.net

我需要存储价值" IdMaterial"从表1(想象有超过40条记录)到一个数组保存所有重新进入表2的代码我将告诉你只保存我的第一条记录而不是全部。

我会在你的帮助下提出你的帮助

代码:

Dim i As Integer             i = 0

        Try


            Dim mater As String
            Dim planta As String
            Dim almacen As String
            Dim lot As String
            Dim cantidad As String
            Dim cantadiat As String
            Dim undad As String
            Dim Cantidadc As String
            Dim CantidadB As String
            Dim Session1 As String
            Dim fecha As String


            '''''
            Dim Con34 As New Data.SqlClient.SqlConnection
            Con34.ConnectionString = C.GetAppConfiguracion("Inventario", "ConnInventario")

            Dim editCustQuery As String = "select * from dbo.s_RptInventarioSAP"
            Con34.Open()
            Using CustCommand As New SqlCommand(editCustQuery, Con34)
                Dim dr As SqlDataReader = CustCommand.ExecuteReader()
                dr.Read()


                mater = dr.GetString(0)
                planta = dr.GetString(1)
                almacen = dr.GetString(2)
                lot = dr.GetString(3)
                cantidad = dr.GetString(4)
                cantadiat = dr.GetString(5)
                undad = dr.GetString(6)
                Cantidadc = dr.GetString(7)
                CantidadB = dr.GetString(8)
                Session1 = dr.GetString(9)
                fecha = dr.GetDateTime(10)
                end using

            Dim Con As New Data.SqlClient.SqlConnection
            Dim StrSQL As String

            Con.ConnectionString = C.GetAppConfiguracion("Inventario", "ConnInventario")

            StrSQL = ""
            StrSQL = "EXEC P_AsigDupla '" & Txtfecha.Text & "','" & cboPlanta0.SelectedValue & "', '" & cboPlanta0.SelectedItem.Text & "','" & cboAlmacen.SelectedValue & "', '" & cboAlmacen.SelectedItem.Text & "', '" & mater & "', '" & lot & "'"
            Con.Open()
            Dim CmdAd As New Data.SqlClient.SqlCommand(StrSQL, Con)
            CmdAd.ExecuteNonQuery()

            Con.Close()

            i = i + 1

            'Next

        Catch ex As Exception
            lbError0.Text = ex.Message

        End Try

    End If
End Sub

2 个答案:

答案 0 :(得分:0)

首先,如果我理解正确,您希望将这40行和多列的信息放入多个数组中。如果这是真的,那么在声明数组时你会丢失()。

        Dim mater() As String
        Dim planta() As String
        Dim almacen() As String
        Dim lot() As String
        Dim cantidad() As String
        Dim cantadiat() As String
        Dim undad() As String
        Dim Cantidadc() As String
        Dim CantidadB() As String
        Dim Session1() As String
        Dim fecha() As String    
        Dim RowCounter as Integer = 0

其次,我会接近这一点。我将运行查询并将结果放入DataTable。然后使用For遍历每一行并开始填充数组。

        MySQLOpenConnection()
        Dim MySQLExecute As New MySqlCommand(MySQLCommand, MySQLConnection)
        Dim MySQLAdapter As MySqlDataAdapter = New MySqlDataAdapter(MySQLExecute)
        Dim TableResult As New DataTable("QueryResult")

        MySQLAdapter.Fill(TableResult)
        MySQLCloseConnection()

        For each tablerow as DataRow in TableResult.Rows
            mater(RowCounter) = TableResult.Rows.Item(RowCounter).Item(0)
            planta(RowCounter) = TableResult.Rows.Item(RowCounter).Item(1)
            almacen(RowCounter) = TableResult.Rows.Item(RowCounter).Item(2)
            lot(RowCounter) = TableResult.Rows.Item(RowCounter).Item(3)
            cantidad(RowCounter) = TableResult.Rows.Item(RowCounter).Item(4)
            cantadiat(RowCounter) = TableResult.Rows.Item(RowCounter).Item(5)
            undad(RowCounter) = TableResult.Rows.Item(RowCounter).Item(6)
            Cantidadc(RowCounter) = TableResult.Rows.Item(RowCounter).Item(7)
            CantidadB(RowCounter) = TableResult.Rows.Item(RowCounter).Item(8)
            Session1(RowCounter) = TableResult.Rows.Item(RowCounter).Item(9)
            fecha(RowCounter) = TableResult.Rows.Item(RowCounter).Item(10)

            RowCounter=RowCounter+1
        Next

答案 1 :(得分:0)

评论的第二个问题的答案没有足够的字符,所以在这里。

好的,我看到你正在使用数组中的值,很多,但你必须定义数组中的哪一个值。

mater()和lot()与数据库中表的行数一样长。因此,如果该表上有20行,那么阵列将有20个元素从lot(0)到lot(19),而其他元素则相同。

如果你需要为每一行获取resultado,那么你必须将resultado()定义为一个数组并使用相同的FOR来填充它。

resultado(RowCounter)=GM.AsigDupla(Txtfecha.Text, cboPlanta0.SelectedValue, cboPlanta0.SelectedItem.Text, cboAlmacen.SelectedValue, cboAlmacen.SelectedItem.Text, mater(RowCounter), lot(RowCounter)

我希望这能解决你的问题。