سؤال

وطيب. لذلك أنا جميلة جديدة لهذا. لدي 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 كما هو الإجراء المخزن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top