none
Stored Procedure de SQL Server no VB - Retornar resultados em arquivo XML

Answers

  • Resolvido da seguinte forma:

     

    Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.AppSettings("StrConnection"))

     

    Dim MySQL As String = "SELECT convert(varchar(3),DATEPART(DY,DATA)) AS DAT,CONVERT(VARCHAR(10),DATA,103) AS DATAD, " & _

     

    "SUM(REAL) AS VALOR, SUM(META) AS META " & _

     

    "FROM ITEMVALOR_INDICADOR A JOIN INDICADOR B ON A.CODINDICADOR = B.CODINDICADOR " & _

     

    "WHERE " & _

     

    "CODGRUPOINDICADOR=1 AND CODGERENCIAN4=2 AND " & _

     

    "CODINFORMACAO=1 AND NSEQINDICADOR =1 AND " & _

     

    "DATA >=(SELECT DISTINCT DATEADD(WK,-10,DATA) " & _

     

    "FROM ITEMVALOR_INDICADOR A JOIN INDICADOR B ON A.CODINDICADOR = B.CODINDICADOR " & _

     

    "WHERE " & _

     

    "CODGRUPOINDICADOR=1 AND CODGERENCIAN4=2 AND " & _

     

    "CODINFORMACAO = 1 And NSEQINDICADOR = 1 " & _

     

    "AND DATA='2009-11-20') AND DATA <='2009-11-20' group by data "

     

    Dim Cmd As New SqlCommand(MySQL, myConn)

     

    Dim dr As SqlDataReader

    myConn.Open()

     

    Try

    dr = Cmd.ExecuteReader

     

    Dim Serie As String = ""

     

    Dim Texto1 As String = "<graph gid='1' type = 'column' title = 'Real' line_width='2'>" & vbCrLf

     

    Dim Texto1_2 As String = ""

     

    Dim Texto2 As String = "<graph gid='3' type = 'line' title = 'Meta'>" & vbCrLf

     

    Dim Texto2_1 As String = ""

     

    Dim writter As New XmlTextWriter("C:\Sistemas\dados.xml", Encoding.UTF8)

     

    Try

     

    Do While dr.Read

    Serie +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("DATAD") & "</value>" & vbCrLf

    Texto1_2 +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("VALOR") & "</value>" & vbCrLf

    Texto2_1 +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("META") & "</value>" & vbCrLf

     

    Loop

     

    Finally

    Texto1_2 = Texto1_2 &

    "</graph>"

    Texto2_1 = Texto2_1 &

    "</graph>"

    writter.WriteRaw(

    "<?xml version='1.0' encoding='UTF-8'?><chart>" & "<series>" & Serie & "</series><graphs>" & Texto1 & Texto1_2 & Texto2 & Texto2_1 & "</graphs></chart>")

    writter.Close()

    dr.Close()

     

    End Try

     

    Finally

    myConn.Close()

     

    End Try


    O Forte Sobreviverá e o Fraco irá Sofrer
    • Marked as answer by pabloslobo Tuesday, August 31, 2010 6:01 PM
    Tuesday, August 31, 2010 6:01 PM

All replies

  • Thursday, August 12, 2010 10:56 PM
  • Teria algum exemplo de como eu passaria a Stored Procedure no código-fonte e como que seu resultado seria incorporado ao fonte do XML?
    O Forte Sobreviverá e o Fraco irá Sofrer
    Friday, August 13, 2010 12:55 PM
  • Teria algum exemplo de como eu passaria a Stored Procedure no código-fonte e como que seu resultado seria incorporado ao fonte do XML?
    O Forte Sobreviverá e o Fraco irá Sofrer

    Esta em consola. mas tu podes mudar como queiras: http://www.codeguru.com/vb/gen/vb_database/sqlserver/article.php/c8671__2/Calling-Stored-Procedures-with-ADONET.htm

     


    Just Be Humble Malange!
    Friday, August 13, 2010 2:39 PM
  • Malange,

       Fiz o seguinte código abaixo baseado no Link que você me passou mas não retorna a consulta em XML. Apenas um número: -1

     

    Private Sub MontaXML()

     

    Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.AppSettings("StrConnection"))

    myConn.Open()

     

    Try

     

    Dim Cmd As SqlCommand = New SqlCommand("ZSPC_MONTAXML", myConn)

    Cmd.CommandType = CommandType.StoredProcedure

    Label1.Text = Cmd.ExecuteNonQuery.ToString

     

    Catch ex As Exception

    MsgBox(ex.Message)

     

    Finally

    myConn.Close()

     

    End Try

     

    End Sub


    O Forte Sobreviverá e o Fraco irá Sofrer
    Friday, August 13, 2010 6:34 PM
  • Posso ver o teu Store procedure por favor?

    Coloca aqui, apenas o codigo dentro da tua SQLServer.

    Obrigado. 


    Just Be Humble Malange!
    Friday, August 13, 2010 11:12 PM
  • A procedure está no primeiro item deste POST.
    O Forte Sobreviverá e o Fraco irá Sofrer
    Monday, August 16, 2010 3:18 PM
  • Prezado,

    Tente fazer um ExecuteReader, ao invés de ExecuteNonQuery...


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    Monday, August 16, 2010 5:19 PM
  • Prezado,

    Tente fazer um ExecuteReader, ao invés de ExecuteNonQuery...


    Benvisto, Andre. Acho que estou a precisar de Oculos:)

    Faz o que o andre sugeriu. Deve funcionar.

     


    Just Be Humble Malange!
    Monday, August 16, 2010 6:44 PM
  • O resultado continua não sendo retornado. Há alguma outra maneira de conseguir montar um XML por VB baseado em resultado de procedure ou mesmo resultado de query, desde que seja estruturado conforme na query do post lá em cima?
    O Forte Sobreviverá e o Fraco irá Sofrer
    Monday, August 16, 2010 7:05 PM
  • Apenas corrigindo,

       Alterando a parte ExecuteNonQuery para ExecuteReader, é retornado isto:

    System.Data.SqlClient.SqlDataReader

    O que está dando de errado?


    O Forte Sobreviverá e o Fraco irá Sofrer
    Monday, August 16, 2010 7:37 PM
  • Apenas corrigindo,

       Alterando a parte ExecuteNonQuery para ExecuteReader, é retornado isto:

    System.Data.SqlClient.SqlDataReader

    O que está dando de errado?


    O Forte Sobreviverá e o Fraco irá Sofrer

    Quando voce testa o teu procedure no SqlServer o que acontece?

    Funciona ou nao?

    Se nao funciona entao tens de ver a estrutura denovo.


    Just Be Humble Malange!
    Monday, August 16, 2010 11:22 PM
  • No SQL Server funciona. Não retorna nada na aplicação do VB.NET
    O Forte Sobreviverá e o Fraco irá Sofrer
    Tuesday, August 17, 2010 1:46 PM
  • No SQL Server funciona. Não retorna nada na aplicação do VB.NET
    O Forte Sobreviverá e o Fraco irá Sofrer

    Voce tem Where no teu procedure, como voce encontra este condicao? voce escreve valor para procurar ou voce simplesmente carrega a informacao que e igual em diversas tabelas?

     


    Just Be Humble Malange!
    Tuesday, August 17, 2010 5:07 PM
  • O Where já está lá em cima no primeiro post. Eu forcei o valor das condições apenas para tentar retornar algo, o que ocorre normalmente o BD.
    O Forte Sobreviverá e o Fraco irá Sofrer
    Tuesday, August 17, 2010 9:15 PM
  • Olha vamos ver uma outra solucao nao uses textbox pra mostrar a query. usa um dataset. preenche e mostra num datagridview e ve o que acontece.

     


    Just Be Humble Malange!
    Tuesday, August 17, 2010 10:26 PM
  • O Resultado esperado é uma estrutura em XML. Não creio que os dados se comportem bem num datagridview.
    O Forte Sobreviverá e o Fraco irá Sofrer
    Wednesday, August 18, 2010 1:12 PM
  • O Resultado esperado é uma estrutura em XML. Não creio que os dados se comportem bem num datagridview.
    O Forte Sobreviverá e o Fraco irá Sofrer

    Eu fiz um store procedure para teste que retornava um valor....Quando fui testar no VB, ele nao retornava nada. Porque?

    Ele me pedia para escrever o valor a pesquizar numa variavel. Quando escrevi retornou o valor que estava a pesquizar no store procedura.

    Pergunto, Porque?

    Estou a investigar.

    Entao altera o teu codigo no VB.Net e coloca os valores e veja se te vai retornar algo.

    Bom Final De Semana.

    Aqui chove muito hoje.


    Just Be Humble Malange!
    Saturday, August 21, 2010 12:54 PM
  • Consegui da seguinte forma retornar o XML pelo VB.NET

    Só substituir a QUERY pelo EXEC + NOME DA PROCEDURE

    O único problema é que os dados do BD são retornados com alguns caracteres estranhos no lugar dos símbolos das tags < e >. São estes caracteres &lt; ;gt

     

    Private Sub MontaXML()

     

    Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.AppSettings("StrConnection"))

     

    Dim MySQL As String = "SELECT +convert(varchar(3),DATEPART(DY,DATA)) AS TESTE FROM ITEMVALOR_INDICADOR"

     

    Dim Cmd As New SqlCommand(MySQL, myConn)

     

    Dim dr As SqlDataReader

    myConn.Open()

     

    Try

    dr = Cmd.ExecuteReader

     

    Dim J As String = ""

     

    Dim writter As New XmlTextWriter("C:\Sistemas\dados.xml", Nothing)

     

    Try

     

    Do While dr.Read

    J += dr(

    "TESTE") & vbCrLf

     

    Loop

     

    Finally

    writter.WriteStartDocument()

    writter.Formatting = Formatting.Indented

    writter.WriteStartElement(

    "chart")

    writter.WriteElementString(

    "serie", J)

    writter.WriteEndElement()

    writter.Close()

    dr.Close()

     

    End Try

     

    Finally

    myConn.Close()

     

    End Try


    O Forte Sobreviverá e o Fraco irá Sofrer
    • Marked as answer by pabloslobo Tuesday, August 24, 2010 2:01 PM
    • Unmarked as answer by pabloslobo Tuesday, August 31, 2010 6:01 PM
    Tuesday, August 24, 2010 2:01 PM
  • Resolvido da seguinte forma:

     

    Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.AppSettings("StrConnection"))

     

    Dim MySQL As String = "SELECT convert(varchar(3),DATEPART(DY,DATA)) AS DAT,CONVERT(VARCHAR(10),DATA,103) AS DATAD, " & _

     

    "SUM(REAL) AS VALOR, SUM(META) AS META " & _

     

    "FROM ITEMVALOR_INDICADOR A JOIN INDICADOR B ON A.CODINDICADOR = B.CODINDICADOR " & _

     

    "WHERE " & _

     

    "CODGRUPOINDICADOR=1 AND CODGERENCIAN4=2 AND " & _

     

    "CODINFORMACAO=1 AND NSEQINDICADOR =1 AND " & _

     

    "DATA >=(SELECT DISTINCT DATEADD(WK,-10,DATA) " & _

     

    "FROM ITEMVALOR_INDICADOR A JOIN INDICADOR B ON A.CODINDICADOR = B.CODINDICADOR " & _

     

    "WHERE " & _

     

    "CODGRUPOINDICADOR=1 AND CODGERENCIAN4=2 AND " & _

     

    "CODINFORMACAO = 1 And NSEQINDICADOR = 1 " & _

     

    "AND DATA='2009-11-20') AND DATA <='2009-11-20' group by data "

     

    Dim Cmd As New SqlCommand(MySQL, myConn)

     

    Dim dr As SqlDataReader

    myConn.Open()

     

    Try

    dr = Cmd.ExecuteReader

     

    Dim Serie As String = ""

     

    Dim Texto1 As String = "<graph gid='1' type = 'column' title = 'Real' line_width='2'>" & vbCrLf

     

    Dim Texto1_2 As String = ""

     

    Dim Texto2 As String = "<graph gid='3' type = 'line' title = 'Meta'>" & vbCrLf

     

    Dim Texto2_1 As String = ""

     

    Dim writter As New XmlTextWriter("C:\Sistemas\dados.xml", Encoding.UTF8)

     

    Try

     

    Do While dr.Read

    Serie +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("DATAD") & "</value>" & vbCrLf

    Texto1_2 +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("VALOR") & "</value>" & vbCrLf

    Texto2_1 +=

    "<value xid='" & Trim(dr("DAT")) & "'>" & dr("META") & "</value>" & vbCrLf

     

    Loop

     

    Finally

    Texto1_2 = Texto1_2 &

    "</graph>"

    Texto2_1 = Texto2_1 &

    "</graph>"

    writter.WriteRaw(

    "<?xml version='1.0' encoding='UTF-8'?><chart>" & "<series>" & Serie & "</series><graphs>" & Texto1 & Texto1_2 & Texto2 & Texto2_1 & "</graphs></chart>")

    writter.Close()

    dr.Close()

     

    End Try

     

    Finally

    myConn.Close()

     

    End Try


    O Forte Sobreviverá e o Fraco irá Sofrer
    • Marked as answer by pabloslobo Tuesday, August 31, 2010 6:01 PM
    Tuesday, August 31, 2010 6:01 PM