簡體   English   中英

將XML文檔作為參數傳遞給.net vb中的sql腳本

[英]Pass XML document as parameter to sql script in .net vb

如何在vb.net中將XML文檔作為參數傳遞給SQL腳本? 我想將XML用作SQL腳本中的變量。 SQL腳本無法將變量i識別為.net中的參數提交者

這是我的XML。

<?xml version="1.0"?>
<sqlSkript>
   <parameter>
      <name>name</name>
      <datentyp>varchar</datentyp>
   </parameter>
   <parameter>
      <name>strasse</name>
      <datentyp>varchar</datentyp>
   </parameter>
</sqlSkript>

這是我的SQL腳本。

DECLARE @xml xml

SET @xml = @test

SELECT  t.name AS table_name,
        SCHEMA_NAME(t.schema_id) AS schema_name,
        c.name AS column_name,
        st.name as datatyp

FROM    sys.tables AS t
        INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
        INNER JOIN sys.types st ON st.system_type_id = c.system_type_id 
        AND st.name != 'sysname'

WHERE   (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[1]', 'varchar(100)')) + '%'
        AND st.name like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[1]', 'varchar(100)')))
        or
        (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[2]', 'varchar(100)')) + '%'
        AND st.name like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[2]', 'varchar(100)')))

ORDER BY schema_name, table_name;

這是我的vb.net代碼

        Dim command As SqlCommand = New SqlCommand()

        Dim xmldoc As New Xml.XmlDocument
        xmldoc.Load(System.IO.Path.GetFullPath(Application.StartupPath & "\XML\indivudellParameter.xml"))

        Dim param As SqlParameter = New SqlParameter("@test", SqlDbType.Xml)
        param.Value = New SqlXml(New XmlTextReader(xmldoc.InnerXml, XmlNodeType.Document, Nothing))
        command.Parameters.Add(param)

        Using reader As SqlDataReader = _server.ConnectionContext.ExecuteReader(script, command)
            While reader.Read()
                //do something
            End While
            reader.Close()
        End Using

編輯:

解決方法

        Dim xmldoc As New Xml.XmlDocument
        xmldoc.Load(System.IO.Path.GetFullPath(Application.StartupPath & "\XML\indivudellParameter.xml"))

        script = script.Replace("@test", xmldoc.InnerXml)

        Using reader As SqlDataReader = _server.ConnectionContext.ExecuteReader(script)
            While reader.Read()
                  // do something
            End While

可能很簡單:

您確定要在兩種情況下將XML數據值與st.name進行比較(用***標記地點)嗎?

WHERE   (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[1]', 'varchar(100)')) + '%'
        AND ***st.name*** like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[1]', 'varchar(100)')))
        or
        (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[2]', 'varchar(100)')) + '%'
        AND ***st.name*** like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[2]', 'varchar(100)')))

如果不是那么簡單:嘗試檢查您的參數是否正確進入SQL腳本(將其寫入某個臨時表並在那里檢查它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM