.NET для данных хранимой процедуры SQL Server в виде XML - PullRequest
0 голосов
/ 08 января 2009

Хорошо. Так что я новичок в этом. У меня есть дата, которую я хочу передать хранимой процедуре для дальнейших манипуляций. Я прочитал кое-что в Интернете, и похоже, что я должен быть в состоянии преобразовать данные в XML и затем передать их хранимой процедуре. Что я делаю не так? У меня SQL Server 2005. Данные никогда не передаются в хранимую процедуру.

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

Хранимая процедура выглядит следующим образом ...

ALTER PROCEDURE [dbo].[ProcessFile]

    (
         @x XML

    )
AS
BEGIN

'DO STUFF HERE

END

Ответы [ 2 ]

1 голос
/ 10 января 2009

OK. Это то, что я иду на работу. Я не знаю, является ли это лучшим способом, но это работает для меня.

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

Хранимая процедура выглядит следующим образом.

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 голос
/ 08 января 2009

В прошлом я делал нечто подобное, но с SQL 2000. В SQL 2000 не было типа данных XML, поэтому мне приходилось получать выходные данные из DataSet.GetXML через параметр ntext в хранимую процедуру, а затем обрабатывать его с помощью sp_xml_preparedocument и sp_xml_removedocument, поэтому процесс должен работать на вас.

Может случиться так, что вам не нужно загружать XmlDocument с текстом, и вы можете просто передать текст XML как есть хранимой процедуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...