.NET de datos para el procedimiento almacenado de SQL Server como XML
-
05-07-2019 - |
Pregunta
Ok. Así que soy bastante nuevo a esto. Tengo un datatable que quiero pasar a un procedimiento almacenado para su posterior manipulación. He leído algunas cosas en la web y parece que debería poder convertir los datos a XML y luego pasarlos al procedimiento almacenado. ¿Qué estoy haciendo mal? Tengo SQL Server 2005. Los datos nunca se pasan al procedimiento almacenado.
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
El procedimiento almacenado tiene este aspecto ...
ALTER PROCEDURE [dbo].[ProcessFile]
(
@x XML
)
AS
BEGIN
'DO STUFF HERE
END
Solución 2
OK. Esto es lo que voy a trabajar. No sé si esta es la mejor manera, pero esto funciona para mí.
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
El procedimiento almacenado tiene este aspecto.
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
Otros consejos
En el pasado he hecho algo similar pero con SQL 2000. En SQL 2000 no había ningún tipo de datos XML, así que tuve que recibir la salida de DataSet.GetXML a través de un parámetro ntext en el procedimiento almacenado y luego lo procesé utilizando sp_xml_preparedocument y sp_xml_removedocument, por lo que el proceso debería funcionar para usted.
Es posible que no necesite cargar un XmlDocument con el texto y que solo pueda pasar el texto xml tal como está al procedimiento almacenado.