XML-waarden opgeven als parameters
Als voor een query een parameter is vereist waarvan de waarde een XML-tekenreeks is, kunt u die waarde opgeven met behulp van een exemplaar van het SqlXml
gegevenstype. Er zijn echt geen trucs; XML-kolommen in SQL Server accepteren parameterwaarden op exact dezelfde manier als andere gegevenstypen.
Opmerking
Met de volgende consoletoepassing maakt u een nieuwe tabel in de AdventureWorks-database . De nieuwe tabel bevat een kolom met de naam SalesID en een XML-kolom met de naam SalesInfo.
Notitie
De AdventureWorks-voorbeelddatabase is niet standaard geïnstalleerd wanneer u SQL Server installeert. U kunt deze installeren door SQL Server Setup uit te voeren.
In het voorbeeld wordt een SqlCommand object voorbereid om een rij in de nieuwe tabel in te voegen. Een opgeslagen bestand bevat de XML-gegevens die nodig zijn voor de kolom SalesInfo .
Als u het bestand wilt maken dat nodig is om het voorbeeld uit te voeren, maakt u een nieuw tekstbestand in dezelfde map als uw project. Geef het bestand een naam MyTestStoreData.xml. Open het bestand in Kladblok en kopieer en plak de volgende tekst:
<StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
<AnnualSales>300000</AnnualSales>
<AnnualRevenue>30000</AnnualRevenue>
<BankName>International Bank</BankName>
<BusinessType>BM</BusinessType>
<YearOpened>1970</YearOpened>
<Specialty>Road</Specialty>
<SquareFeet>7000</SquareFeet>
<Brands>3</Brands>
<Internet>T1</Internet>
<NumberEmployees>2</NumberEmployees>
</StoreSurvey>
Imports System
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Xml
Module Module1
Sub Main()
Using connection As SqlConnection = New SqlConnection(GetConnectionString())
connection.Open()
' Create a sample table (dropping first if it already
' exists.)
Dim commandNewTable As String = _
"IF EXISTS (SELECT * FROM dbo.sysobjects " & _
"WHERE id = object_id(N'[dbo].[XmlDataTypeSample]') " & _
"AND OBJECTPROPERTY(id, N'IsUserTable') = 1) " & _
"DROP TABLE [dbo].[XmlDataTypeSample];" & _
"CREATE TABLE [dbo].[XmlDataTypeSample](" & _
"[SalesID] [int] IDENTITY(1,1) NOT NULL, " & _
"[SalesInfo] [xml])"
Dim commandAdd As New _
SqlCommand(commandNewTable, connection)
commandAdd.ExecuteNonQuery()
Dim commandText As String = _
"INSERT INTO [dbo].[XmlDataTypeSample] " & _
"([SalesInfo] ) " & _
"VALUES(@xmlParameter )"
Dim command As New SqlCommand(commandText, connection)
' Read the saved XML document as a
' SqlXml-data typed variable.
Dim newXml As SqlXml = _
New SqlXml(New XmlTextReader("MyTestStoreData.xml"))
' Supply the SqlXml value for the value of the parameter.
command.Parameters.AddWithValue("@xmlParameter", newXml)
Dim result As Integer = command.ExecuteNonQuery()
Console.WriteLine(result & " row was added.")
Console.WriteLine("Press Enter to continue.")
Console.ReadLine()
End Using
End Sub
Private Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
Return "..."
End Function
End Module
using System;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.Data.SqlTypes;
class Class1
{
static void Main()
{
using (SqlConnection connection = new SqlConnection(GetConnectionString()))
{
connection.Open();
// Create a sample table (dropping first if it already
// exists.)
string commandNewTable =
"IF EXISTS (SELECT * FROM dbo.sysobjects " +
"WHERE id = " +
"object_id(N'[dbo].[XmlDataTypeSample]') " +
"AND OBJECTPROPERTY(id, N'IsUserTable') = 1) " +
"DROP TABLE [dbo].[XmlDataTypeSample];" +
"CREATE TABLE [dbo].[XmlDataTypeSample](" +
"[SalesID] [int] IDENTITY(1,1) NOT NULL, " +
"[SalesInfo] [xml])";
SqlCommand commandAdd =
new SqlCommand(commandNewTable, connection);
commandAdd.ExecuteNonQuery();
string commandText =
"INSERT INTO [dbo].[XmlDataTypeSample] " +
"([SalesInfo] ) " +
"VALUES(@xmlParameter )";
SqlCommand command =
new SqlCommand(commandText, connection);
// Read the saved XML document as a
// SqlXml-data typed variable.
SqlXml newXml =
new SqlXml(new XmlTextReader("MyTestStoreData.xml"));
// Supply the SqlXml value for the value of the parameter.
command.Parameters.AddWithValue("@xmlParameter", newXml);
int result = command.ExecuteNonQuery();
Console.WriteLine(result + " row was added.");
Console.WriteLine("Press Enter to continue.");
Console.ReadLine();
}
}
private static string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "...";
}
}