Данные .NET для хранимой процедуры SQL Server в виде XML
-
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 как есть в хранимую процедуру.