2009-01-08 5 views
0

Ok. Donc je suis assez nouveau. J'ai un datatable que je veux passer à une procédure stockée pour plus de manipulation. J'ai lu des trucs sur le web et il me semble que je devrais être capable de convertir la datatable en XML et de passer ensuite cela à la procédure stockée. Qu'est-ce que je fais de mal? J'ai SQL Server 2005. Les données ne sont jamais passées à la procédure stockée..NET stockable à SQL Server procédure stockée en tant que XML

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 procédure stockée ressemble à ceci ...

ALTER PROCEDURE [dbo].[ProcessFile] 

    (
     @x XML 

    ) 
AS 
BEGIN 

'DO STUFF HERE 

END 
+0

Que se passe-t-il dans dsTestTableAdapters.TESTRxTableAdapter? – edosoft

Répondre

1

OK. C'est ce que je vais travailler. Je ne sais pas si c'est la meilleure façon, mais ça marche pour moi.

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 procédure stockée Ressemble à ceci.

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 
1

Dans le passé, je l'ai fait quelque chose de similaire, mais avec SQL 2000. Dans SQL 2000 il n'y avait pas de données XML de type si je devais recevoir la sortie de DataSet.GetXML via un paramètre ntext dans la procédure stockée l'a ensuite traitée en utilisant sp_xml_preparedocument et sp_xml_removedocument, de sorte que le processus devrait fonctionner pour vous.

Il se peut que vous n'ayez pas besoin de charger un document XmlDocument avec le texte et pouvez simplement passer le texte xml tel quel à la procédure stockée.

Questions connexes