none
Relations com SQL Server via código RRS feed

  • Pergunta

  • Olá pessoal, estou tentando aprender sobre as Relations, já peguei o básico como primary key e foreign key e etc.

    Mas estou empacado pelo seguinte motivo, todas as minhas conexões, consultas, datasets e etc são via código. E eu queria utilizar as Relations que já estão configuradas no SQL Server em vez de criar outras manualmente via código.

    Alguém poderia me dar uma luz?

    Segue um pouco da situação do meu banco e do meu código:

    Aqui temos uma função de conexão, com a opção de adicionar algum parâmetro a consulta (como um WHERE e etc). Essa função faz a conexão na tabela passada anteriormente, cria os comandos Insert, Update e Delete, preenche o DataSet "ds" e retorna o DataSet por inteiro para o código principal:

    Function consulta(ByVal tabela As String, Optional opt As Boolean = False, Optional optparam As String = "") As DataSet
            Dim ds As New DataSet
            Try
                Dim conObj As New SqlConnection(My.Settings.constr)
                Dim sql As String
    
                If opt = True Then
                    sql = "SELECT * FROM " & tabela & " " & optparam
    
    
                Else
                    sql = "SELECT * FROM " & tabela
                End If
                adapter = New SqlDataAdapter(sql, conObj)
                Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)
                builder.QuotePrefix = "["
                builder.QuoteSuffix = "]"
                builder.RefreshSchema()
    
                conObj.Open()
    
                adapter.Fill(ds, tabela)
                adapter.TableMappings.Add(tabela, tabela)
    
                conObj.Close()
    
                Return ds
            Catch ex As Exception
                MessageBox.Show("Erro na consulta" & vbCrLf & ex.InnerException.ToString, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
                ds.Clear()
                Return ds
    
            End Try
    
        End Function

    Aqui temos uma SUB que faz a consulta em uma tabela de produtos e insere em um datagridview, tudo manualmente, sem bindingsources ou algo asim:

     Public Sub carrega_dgv()
            Dim total As Integer
    
            Dim id_prod As Integer
            Dim item As Integer
            Dim descricao As String
            Dim valor_unit As Double
            Dim qtd As Double
            Dim unidade As String
            Dim subtotal As Double
    
    
    
            Dim ds_produto As DataSet
    
            dgvLista.Rows.Clear()
    
    
            ds_lista = db.consulta("lista_venda", True, "WHERE id_venda = " & id_venda)
    
            total = ds_lista.Tables(0).Rows.Count - 1
    
            For i As Integer = 0 To total
                id_prod = ds_lista.Tables(0).Rows(i).Item(3)
                item = ds_lista.Tables(0).Rows(i).Item(2)
                qtd = FormatNumber(ds_lista.Tables(0).Rows(i).Item(4), 3)
                valor_unit = FormatNumber(ds_lista.Tables(0).Rows(i).Item(5), 3)
    
                ds_produto = db.consulta("produtos", True, "WHERE id = " & id_prod)
    
    
                descricao = ds_produto.Tables(0).Rows(0).Item(2)
    
                unidade = db.squery("SELECT reduzido FROM unidades WHERE id = " & ds_produto.Tables(0).Rows(0).Item(7))
    
                subtotal = qtd * valor_unit
    
                Dim n As Integer = dgvLista.Rows.Add()
                dgvLista.Rows.Item(n).Cells(0).Value = item
                dgvLista.Rows.Item(n).Cells(1).Value = descricao
                dgvLista.Rows.Item(n).Cells(2).Value = qtd
                dgvLista.Rows.Item(n).Cells(3).Value = unidade
                dgvLista.Rows.Item(n).Cells(4).Value = FormatCurrency(valor_unit, 2)
                dgvLista.Rows.Item(n).Cells(5).Value = FormatCurrency(subtotal, 2)
            Next
        End Sub

    Como vocês devem ter percebido, nessa parte tem uma gambiarra das grandes.

    Eu tenho a tabela principal 'lista_venda', onde está a coluna 'id_prod' e eu uso esse ID para buscar o valor unitário e a descrição na tabela 'produto' e ao mesmo tempo, utilizo o código que está na coluna 'unidade' para buscar o 'reduzido' na tabela unidades (ex: UN, ou PCT, ou KG).

    Eu queria saber como posso fazer isso em utilizando uma Relation, que já está configurada no SQL Server? (no caso, duas)

    Na tabela 'lista_venda' a coluna 'id_prod' é vinculada a coluna 'id' da tabela 'produtos', como eu consigo pegar a coluna 'nome' da tabela 'produtos'?

    Desculpem se eu não consegui explicar direito, qualquer dúvida me avisem que eu tento explicar melhor.

    Obs: Quero evitar o máximo fazer alguma Relation direto no DataSet, eu queria utilizar a Relation que está no SQL Server.

    Obrigado.

    terça-feira, 4 de novembro de 2014 03:20

Respostas

  • Bom dia Junior,

    Veja se o link te ajuda:

    http://msdn.microsoft.com/en-us/library/ms189049.aspx

    Att,


    Ricardo Cortes Microsoft Contingent Staff

    Esse contedo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    quarta-feira, 5 de novembro de 2014 12:42