صافي DataTable وإلى SQL Server الإجراء المخزن كما XML
-
05-07-2019 - |
سؤال
وطيب. لذلك أنا جميلة جديدة لهذا. لدي DataTable الذي أريد لتمريرها إلى إجراء مخزن لمزيد من التلاعب. لقد قرأت بعض الاشياء على شبكة الإنترنت، ويبدو أنني يجب أن تكون قادرة على تحويل DataTable ولXML ومن ثم تمرير هذا الإجراء المخزن. ما أنا doning خطأ؟ لدي الخادم 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
و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
نصائح أخرى
في الماضي كنت قد فعلت شيئا من هذا القبيل ولكن مع SQL 2000. في SQL 2000 لم يكن هناك أي نوع بيانات XML لذلك اضطررت لتلقي الإخراج من DataSet.GetXML عبر معلمة NTEXT إلى الإجراء المخزن ثم معالجتها باستخدام sp_xml_preparedocument و sp_xml_removedocument، لذلك يجب أن تعمل عملية بالنسبة لك.
ومن المحتمل أن يكون لا تحتاج إلى تحميل XmlDocument مع النص، ويمكن أن يمر النص XML كما هو الإجراء المخزن.