How can I pass XML document as Parameter to SQL script in vb.net? I want to use the XML as a variable in SQL script. The SQL script dont recognizes the variable which i as a parameter submitter in .net
This is my XML.
<?xml version="1.0"?>
<sqlSkript>
<parameter>
<name>name</name>
<datentyp>varchar</datentyp>
</parameter>
<parameter>
<name>strasse</name>
<datentyp>varchar</datentyp>
</parameter>
</sqlSkript>
This is my SQL-Script.
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;
This is my vb.net code
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
EDIT:
workaround
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
Might be quite simple:
Are you sure that you want to compare your XML-data values against st.name in both cases (marked the places with ***
)?
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)')))
If it's not that simple: Try to check if your parameter comes into the SQL script correctly (write it into some temp table and check it there.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.