Storing Dataview values in a List

Asked

Viewed 53 times

0

I am doing the maintenance in a discount system of a customer, the same was already ready but not functional, only applied the validation of the discount if there was a single item.

What I need is to assemble a list that will be used by a query to query in the bank.

  Dim produtoID As New List(Of Integer)()
  Dim ProdutoBandeira As New List(Of Boolean)()

  While (reader3.Read())
                produtoID.Add(reader3.Item("ID"))
                ProdutoBandeira.Add(reader3.Item("BandeiraProduto"))
  End While

This is the moment where I need to create this list, unfortunately, it only exists if there is a single element

This is the complete code

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click


        Dim MyConnection = New OleDbConnection(CONEXAO)
        MyConnection.Open()
        Dim comando2 As New OleDbCommand
        comando2.Connection = MyConnection
        comando2.CommandText = "SELECT * from loja_codigo WHERE codigo = '" & cupomDesconto.Text & "'"
        Dim reader2 As OleDbDataReader = comando2.ExecuteReader()
        Dim desconto As Integer
        Dim TipoCupom As Boolean

        While reader2.Read
            desconto = reader2.Item("Desconto")
            TipoCupom = reader2.Item("BandeiraProduto")
        End While

        Dim MyConnection2 = New OleDbConnection(CONEXAO)
        MyConnection2.Open()
        Dim comando3 As New OleDbCommand
        comando3.Connection = MyConnection

        Dim listaProdutos As New List(Of String)()

        For Each ObterProduto As String In Session("Produtos")
            listaProdutos.Add(ObterProduto)
        Next

        comando3.CommandText = "SELECT * from Loja_Produtos WHERE Nome = '" & String.Join(",", listaProdutos.ToArray()) & "'"


        Dim reader3 As OleDbDataReader = comando3.ExecuteReader()
        Dim produtoID As New List(Of Integer)()
        Dim ProdutoBandeira As New List(Of Boolean)()

        While (reader3.Read())
                produtoID.Add(reader3.Item("ID"))
                ProdutoBandeira.Add(reader3.Item("BandeiraProduto"))
        End While

            Dim precoItem = FormatCurrency(CDec(RTotalPedido.Value))

            Dim valorDesconto As Double
            valorDesconto = precoItem - desconto

            If desconto > 0 Then
                If LValorPedido.Text.Contains("Desconto Aplicado") Then
                    Response.Write("<script language='javascript'>alert('Cupom Aplicado!');</script>")
                End If
                If Not LValorPedido.Text.Contains("Desconto Aplicado") Then
                    If (ProdutoBandeira.Contains(TipoCupom)) Then
                        LValorPedido.Text = "Desconto Aplicado! Desconto obtido: " & FormatCurrency(CDec(desconto)) & "<br /> Valor total do pedido: " & FormatCurrency(CDec(valorDesconto))
                    Else
                        LValorPedido.Text = "O desconto é aplicável para outra categoria de produtos"
                    End If
                End If

            ElseIf cupomDesconto.Text = "" Then
                LValorPedido.Text = "Valor total do pedido: " & precoItem
            Else
                Response.Write("<script language='javascript'>alert('Cupom Inválido!');</script>")
                Response.Write("<script language='javascript'>window.location='/carrinho.aspx';</script>")
            End If
            RTotalPedido.Value = precoItem - desconto
            Session("valorDesconto") = -desconto
    End Sub
  • I understood that the problem is how I am assembling the query: Dim listingQuery = String.Join(",", listProducts.Toarray()) command3.Commandtext = "SELECT * from Loja_products WHERE Name = '" & String.Join(",", listingProducts.Toarray()) & "'"

1 answer

0


Resolved as follows:

        Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'Obtem Códigos
        Dim MyConnection = New OleDbConnection(Conexao)
        MyConnection.Open()
        Dim comando2 As New OleDbCommand
        comando2.Connection = MyConnection
        comando2.CommandText = "SELECT * from loja_codigo WHERE codigo = '" & cupomDesconto.Text & "'"
        Dim reader2 As OleDbDataReader = comando2.ExecuteReader()
        Dim desconto As Integer
        Dim TipoCupom As Boolean

        While reader2.Read
            desconto = reader2.Item("Desconto")
            TipoCupom = reader2.Item("BandeiraProduto")
        End While

        'Obtem Produtos
        Dim MyConnection2 = New OleDbConnection(Conexao)
        MyConnection2.Open()
        Dim comando3 As New OleDbCommand
        comando3.Connection = MyConnection

        Dim listaProdutos As New List(Of String)()

        For Each ObterProduto As String In Session("Produtos")
            listaProdutos.Add(ObterProduto)
        Next

        Dim produtoID As New List(Of Integer)()
        Dim ProdutoBandeira As New List(Of Boolean)()

        Dim QueryList As New List(Of String)()

        'Gera Query
        For Each item As String In listaProdutos
            QueryList.Add("Nome='" + item + "' OR")
        Next

        'Transforma Query em uma string e remove o ultimo OR
        Dim Query = "SELECT * from Loja_Produtos WHERE " & String.Join(" ", QueryList.ToArray()).ToString()
        Dim AjusteQuery = Query.Remove(Query.Length - 2)

        'Executa 
        comando3.CommandText = AjusteQuery

        'Adiciona ID, Bandeira do Produto em uma Lista
        Dim reader3 As OleDbDataReader = comando3.ExecuteReader()

        While (reader3.Read())
            produtoID.Add(Integer.Parse(reader3.Item("ID")))
            ProdutoBandeira.Add(Boolean.Parse(reader3.Item("BandeiraProduto")))
        End While

        Dim precoItem = FormatCurrency(CDec(RTotalPedido.Value))

        Dim valorDesconto As Double
        valorDesconto = precoItem - desconto

        If desconto > 0 Then
            If LValorPedido.Text.Contains("Desconto Aplicado") Then
                Response.Write("<script language='javascript'>alert('Cupom Aplicado!');</script>")
            End If
            If Not LValorPedido.Text.Contains("Desconto Aplicado") Then
                'Compara se o carrinho possui produto bandeira = cupom bandeira
                If (ProdutoBandeira.Contains(TipoCupom)) Then
                    LValorPedido.Text = "Desconto Aplicado! Desconto obtido: " & FormatCurrency(CDec(desconto)) & "<br /> Valor total do pedido: " & FormatCurrency(CDec(valorDesconto))
                ElseIf (TipoCupom = False) Then
                    LValorPedido.Text = "Desconto aplicável a compras que possuem produtos TIPO X"
                ElseIf (TipoCupom = True) Then
                    LValorPedido.Text = "Desconto aplicável a compras que possuem produtos TIPO Y"
                End If
            End If

        ElseIf cupomDesconto.Text = "" Then
            LValorPedido.Text = "Valor total do pedido: " & precoItem
        Else
            Response.Write("<script language='javascript'>alert('Cupom Inválido!');</script>")
            Response.Write("<script language='javascript'>window.location='/carrinho.aspx';</script>")
        End If
        RTotalPedido.Value = precoItem - desconto
        Session("valorDesconto") = -desconto
        End Sub
  • 1

    tries to give more details of how you solve yourself and what the problem is. Thus makes it very difficult to analyze the answer.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.