Данные .NET для хранимой процедуры SQL Server в виде XML

StackOverflow https://stackoverflow.com/questions/424626

  •  05-07-2019
  •  | 
  •  

Вопрос

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

ХОРОШО.Это то, ради чего я хожу на работу.Я не знаю, лучший ли это способ, но у меня это работает.

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

Другие советы

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

Возможно, вам не нужно загружать XmlDocument с текстом, и вы можете просто передать текст XML как есть в хранимую процедуру.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top