Domanda

Ok. Quindi sono abbastanza nuovo per questo. Ho un datatable che voglio passare a una stored procedure per ulteriore manipolazione. Ho letto alcune cose sul web e sembra che dovrei essere in grado di convertire il datatable in XML e quindi passarlo alla procedura memorizzata. Cosa sto sbagliando? Ho SQL Server 2005. I dati non vengono mai passati alla procedura memorizzata.

Sub Test()
    Dim dt As New DataTable

    Fill datatable code omitted. there are 150 rows in the datatable after this

    Dim ds As New DataSet
    ds.Tables.Add(dt)
    Dim x As XmlDocument
    x.LoadXml(dt.DataSet.GetXml)
    Dim ta As New dsTestTableAdapters.TESTRxTableAdapter
    ta.ProcessFile(x)
End Sub

La procedura memorizzata è simile a questa ...

ALTER PROCEDURE [dbo].[ProcessFile]

    (
         @x XML

    )
AS
BEGIN

'DO STUFF HERE

END
È stato utile?

Soluzione 2

OK. Questo è quello che vado a lavorare. Non so se questo è il modo migliore, ma questo funziona per me.

Sub Test
    Dim ds as new DataSet ("Testds")
    Dim dt as New DataTable("Testdt")
    'Fill Datatable code omitted

Dim ta as new dsTest.TestTableAdapter
    'TableAdapter returns a datatable to ensure that the stored procedure worked
    ta.AddDataToDB(dt,ds.GetXML)

    Me.DataGridView1.DataSource=dt
    End Sub

La procedura memorizzata si presenta così.

CREATE PROCEDURE [dbo].[AddDataToDB]

    (
         @x XML

    )
AS
    BEGIN
        DECLARE @data TABLE (
                            TestCol1 VARCHAR(50),
                            [TestCol2] VARCHAR(50), 
                            [TestCol3] VARCHAR(50), 
                            )

        INSERT INTO @data (
                           [TestCol1],
                           [TestCol2],
                           [TestCol3]
                          )
        SELECT 
            xmlVals.rowvals.query('TestCol1').value('.','VARCHAR(50)'),
            xmlVals.rowvals.query('TestCol2').value('.','VARCHAR(50)'),
            xmlVals.rowvals.query('TestCol3').value('.','VARCHAR(50)')
        FROM 
            @x.nodes('/Testds/Testdt') as xmlVals(rowvals)



        SELECT * FROM @data     

    END

Altri suggerimenti

In passato ho fatto qualcosa di simile ma con SQL 2000. In SQL 2000 non esisteva un tipo di dati XML, quindi ho dovuto ricevere l'output da DataSet.GetXML tramite un parametro ntext nella procedura memorizzata, quindi elaborarlo utilizzando sp_xml_preparedocument e sp_xml_removedocument, quindi il processo dovrebbe funzionare per te.

Potrebbe non essere necessario caricare un documento Xml con il testo e passare semplicemente il testo xml così com'è alla procedura memorizzata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top