Ir para conteúdo
Fórum Script Brasil
  • 0

Parâmetros Dinâmicos


Nabvchodhonozohr

Pergunta

Olá pessoal!

Estou com um grande problema e não sei se alguém poderia me ajudar, mas estou mesmo desesperado.

Estou fazendo o projeto da faculdade e me deparei com o seguinte: tenho q desenvolver em 3 camadas OO. Tenho uma camada de dados q faz conexão com o banco e traz os resultados de uma consulta SQL. Só q eu não quero mais inserir queries diretamente no meu código, portanto eu criei várias procedures q executarão todas as operações no banco. Crie uma função q recebe como argumento uma hashtable com os argumentos de um SQLParameter completo. Tipo como aí embaixo:

Public Function appendParamSQL(ByVal htParam As Hashtable) As SqlCommand

        Dim i As Integer

        objCommand = New SqlCommand

        objCommand.CommandText = htParam("NomeProc")
        objCommand.CommandType = CommandType.StoredProcedure
        objCommand.Connection = Me.objConn

        For i = 0 To htParam.Count
            objParameter = New SqlParameter
            objParameter.ParameterName = htParam("ParamName")
            objParameter.SqlDbType = CType(htParam("Tipo"), SqlDbType)
            objParameter.Size = CInt(htParam("Tamanho"))
            objParameter.Value = htParam("Valor")
            objParameter.Direction = CType(htParam("Direcao"), ParameterDirection)
            objParameter = New SqlParameter

            objCommand.Parameters.Add(objParameter)
        Next

        Return objCommand

End Function
Ou seja, vai me retornar um command completo pra só executar num adapter qualquer. O problema é: para cada parâmetro eu tenho q criar 5 chaves com os valores tipo:
htParams.Add("param1", "@idata")
htParams.Add("Tipo", SqlDbType.VarChar)
htParams.Add("Tamanho", 30)
htParams.Add("Valor", "tataasd")
htParams.Add("Direcao", ParameterDirection.Input)

Eu estou achando muito trabalhoso isso, mas preciso de abstração nesse caso. Haveria outro jeito de implementar esse absurdo de uma forma q eu não precise passar tantos dados pra apenas uma função?

Obrigado.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Fala, Gray!!!

Pow, não desisti do projeto não hein! estou todo enrolado mas vai sair, se Deus quiser. Espero q possamos nos ajudar mutuamente pra acabar essa faculdade logo, se bem q é mais fácil você acabar me ajudando mais do q eu possa te ajudar (grande mestre jedi!!!).

Cara, eu voltei a mexer na minha camada de dados. Não quero criar queries no meio do código da classe de negócios e passar para a classe de dados. Daí eu criei um monte de procedures. O q eu preciso é só criar uma função q eu passe os argumentos de cada parâmetro e essa função monte um command com todos os parâmetros necessários q eu passar.

Eu já criei essa função. Só q para cada parâmetro eu tenho q criar muito código. Eu só quero saber se tem uma estrutura de dados q suporte uma matriz de vários tipos de dados, tipo assim:

Dim matrizParams as ???

'1 é o índice do parâmetro
matrizParams.add(1, "strValor1", intValor2, sqldbtypeValor3, parameterDirectionValor4,...)

'A matriz aceita vários tipos de dados
matrizParams.add(2, "strValor1", intValor2, sqldbtypeValor3, parameterDirectionValor4,...)

'Ao acessar eu teria tipo assim
matrizParams(2,1) ' "strValor1"
matrizParams(2,1,1) ' intValor2
matrizParams(1,1,1,1) ' sqldbtypeValor3

Sei q é muito subjetivo, mas é pra evitar ter q criar várias entradas num hashtable e acaba não sendo tão dinâmico assim ou até mais pesado. A pessoa q for usar a camada de dados só precisa saber o nome da procedure e os parâmetros a serem passados. Em asp eu fazia isso mas usava uma string e depois dissecava ela todinha pra tirar os parâmetros necessários, mas acho isso um desperdício de processamento, sei q tem um jeito mais prático.

Valeu.

Link para o comentário
Compartilhar em outros sites

  • 0

Pô cara, eu é que estou quase desistindo desse projeto... hehehehe (brincadeira). Em relação ao seu problema, acho que você está precisando de uma ArrayList:

        Dim matrizParams As New ArrayList

        matrizParams.Add(New Object() {"strValor1", intValor2, sqldbtypeValor3, parameterDirectionValor4})
        matrizParams.Add(New Object() {"strValor1", intValor2, sqldbtypeValor3, parameterDirectionValor4})

        MessageBox.Show(matrizParams(0)(0)) 'strValor1 (0) do primeiro item (0)
        MessageBox.Show(matrizParams(1)(1)) 'intValor2 (1) do segundo item (1)
        MessageBox.Show(matrizParams(1)(2)) 'sqldbtypeValor3 (2) do segundo item (1)
E você também poderia criar uma função com quantidade de parâmetros variável para poder preencher a ArrayList:
    Public Function Preenche(ByRef mP As ArrayList, ByVal ParamArray objetos() As Object)
        mP.Add(objetos)
    End Function
Depois bastaria utilizá-la assim:
        Dim matrizParams As New ArrayList

        Preenche(matrizParams, "strValor1", intValor2, sqldbtypeValor3, parameterDirectionValor4)
        Preenche(matrizParams, "strValor2", intValor2, sqldbtypeValor3, parameterDirectionValor4)

        MessageBox.Show(matrizParams(0)(0)) 'strValor1 (0) do primeiro item (0)
        MessageBox.Show(matrizParams(1)(1)) 'intValor2 (1) do segundo item (1)
        MessageBox.Show(matrizParams(1)(2)) 'sqldbtypeValor3 (2) do segundo item (1)

Seria isso? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Pô, valeu cara, era isso mesmo.

Engraçado q ontem eu tentei com o ArrayList mas, q eu me lembre, ele só suportava valores únicos. Tipo arrLst.Add(key, value). Da maneira q vc fez, ficou um array de matrizes, estou certo? Não sabia q podia ser feito assim, passando um object.

Valeu cara, brigadão.

Até mais, na aula de (blarg!!!) sociologia!

Link para o comentário
Compartilhar em outros sites

  • 0

Pô, valeu cara, era isso mesmo.

Engraçado q ontem eu tentei com o ArrayList mas, q eu me lembre, ele só suportava valores únicos. Tipo arrLst.Add(key, value). Da maneira q vc  fez, ficou um array de matrizes, estou certo? Não sabia q podia ser feito assim, passando um object.

Exatamente, uma lista cujos elementos são vetores de objects. smile.gif

Até mais, na aula de (blarg!!!) sociologia!

Hehehe... não vou não... tenho que adiantar o projeto aqui!

Até,

Grraymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...