0

行。所以我很新。我有一个数据表,我想将其传递给存储过程以进行进一步操作。我在网上阅读了一些东西,看起来我应该能够将数据表转换为 XML,然后将其传递给存储过程。我做错了什么?我有 SQL Server 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
4

2 回答 2

1

过去我用 SQL 2000 做过类似的事情。在 SQL 2000 中没有 XML 数据类型,所以我必须通过 ntext 参数将 DataSet.GetXML 的输出接收到存储过程中,然后使用 sp_xml_preparedocument 和 sp_xml_removedocument 处理它,所以该过程应该适合您。

您可能不需要加载带有文本的 XmlDocument,只需将 xml 文本按原样传递给存储过程。

于 2009-01-08T17:22:49.680 回答
1

好的。这就是我去上班的地方。我不知道这是否是最好的方法,但这对我有用。

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
于 2009-01-09T21:43:36.603 回答