Usuário com melhor resposta
Query utilizando IN

Pergunta
-
Pessoal,
estou quebrando a cabeça a alguns dias e nao cosigo resolver este problema. tenho uma query que recebe um parametro (@uf) que será um ou mais estados. Estou filtrando isso utilizando um listbox + gridview.
O problema é que quando eu executo a consulta a query está incluindo aspas duplas no meu parametro ao inves de aspas simples como estou passando.
Dim filtro As String = ""
For Each item As ListItem In ListBox1.Items
If item.Selected = True Then
If filtro = "" Then
filtro = filtro & item.Value
Else
filtro =
"'" + filtro + "'" + "," + "'" + item.Value + "'"
End If
End If
Next
Me.Label1.Text = filtro
SqlDataSource4.SelectParameters.Item("UF").DefaultValue = filtro
End Sub
resultado na query pelo sql profile
N'@uf nvarchar(10),@ativ nvarchar(16)',@uf=N'''AC'',''AM''',@ativ=N'MAPEAMENTO & GIS'
O que eu preciso é que a query seja criada usando ''AC','AM''
Att.,
Valmir Lima
Respostas
-
Fala Valmir, blz?
Cara tente isso no seu for:Dim filtro As String = ""
For Each item As ListItem In ListBox1.Items
If item.Selected Then
filtro = filtro & "'" & item.Value & "',"
End If
Next
filtro = filtro.Substring(0, filtro.lenght - 1)
Att. Alan
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Danimar Ribeiro terça-feira, 19 de janeiro de 2010 01:56
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 14 de julho de 2011 13:10
-
Olá Vlamir blz?
Estranho cara ele só ter colocado o primeiro. A lógica do que te passe é o seguinte: Inicializa a variável filtro com uma string vazia, depois varre todo o listbox, verificando se o item está selecionado. Se estiver concatena na variável filtro com uma aspa simples, o item outra aspa simples seguido de uma virgula. ao final do for each usa o comando substring para retirar a ultima virgula do listbox.
Com isso era para funcionar. Sugiro que você coloque um break point para debuggar a aplicação e ver o que ocorre de errado.
Qualquer dúvida poste novamente.
Grande abraço.
Att. Alan
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Alan Cossari terça-feira, 19 de janeiro de 2010 18:55
- Não Sugerido como Resposta Valmir.lima sexta-feira, 29 de janeiro de 2010 17:52
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 14 de julho de 2011 13:10
Todas as Respostas
-
Fala Valmir, blz?
Cara tente isso no seu for:Dim filtro As String = ""
For Each item As ListItem In ListBox1.Items
If item.Selected Then
filtro = filtro & "'" & item.Value & "',"
End If
Next
filtro = filtro.Substring(0, filtro.lenght - 1)
Att. Alan
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Danimar Ribeiro terça-feira, 19 de janeiro de 2010 01:56
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 14 de julho de 2011 13:10
-
Opa, tudo bem Alan.
Obrigado pela rapida resposta.
Com a sua sugestão, ele apenas colocou no IN o primeiro parametro escolhido no listbox. Ex. eu inclui AL e AM, mas a query apenas recebeu um parametro (AL)
,N'@uf nvarchar(10),@ativ nvarchar(30)',@uf=N'AL',@ativ=N'MAPEAMENTO & GIS'
Obrigado pela ajuda!
Valmir
Valmir Lima -
Olá Vlamir blz?
Estranho cara ele só ter colocado o primeiro. A lógica do que te passe é o seguinte: Inicializa a variável filtro com uma string vazia, depois varre todo o listbox, verificando se o item está selecionado. Se estiver concatena na variável filtro com uma aspa simples, o item outra aspa simples seguido de uma virgula. ao final do for each usa o comando substring para retirar a ultima virgula do listbox.
Com isso era para funcionar. Sugiro que você coloque um break point para debuggar a aplicação e ver o que ocorre de errado.
Qualquer dúvida poste novamente.
Grande abraço.
Att. Alan
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Alan Cossari terça-feira, 19 de janeiro de 2010 18:55
- Não Sugerido como Resposta Valmir.lima sexta-feira, 29 de janeiro de 2010 17:52
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 14 de julho de 2011 13:10