Udostępnij za pośrednictwem


Obsługa typu danych xml i typów zdefiniowanych przez użytkownika CLR

Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.

W macierzystym usług XML sieci Web rozpoczynający się od SQL Server 2005, takich jak przekazywanie typów xml Typ danych lub language runtime (CLR) użytkownika typowych wymaga niektóre zadania dodatkowe rozwoju.W tym temacie opisano zadania, należy wykonać, aby umożliwić aplikacji opartych na usługi XML sieci Web do pracy z xml i CLR typ zdefiniowany przez użytkownika metody sieci Web i kwerend parametrycznych.

Ostrzeżenie

Zakłada się, że podstawowy wiedza wdrażania macierzysty usług XML sieci Web w SQL Server.Obejmuje to są zaznajomieni z takich zadań, jak tworzenie punktów końcowych, narażania programowania SQL jako metody sieci Web i podstawowe aplikacje klient sieci Web dla SQL Server , użyj innych wbudowanych typów SQL.Jeśli chcesz przejrzeć te informacje, zobacz Pojęcia dotyczące usług sieci Web XML macierzystego, Wdrażanie macierzysty usług XML sieci Web, i Najważniejsze wskazówki dotyczące korzystania z usług sieci Web XML macierzystego.

Obsługa typu danych w aplikacji klienta sieci Web xml

Dla aplikacji sieci Web klient do poprawnej obsługi xml typu danych, niektóre szczegóły zależała od której z poniższych scenariuszy dotyczy:

  • Pracujesz z procedura składowana, która jest ujawniona jako metoda sieci Web dla punktu końcowego.

  • Korzystanie z SQL partia (sqlpartia) funkcji punktu końcowego, aby wykonać kwerendę parametryczną.

Obydwa scenariusze te wymagają sparametryzowana wystąpienia xml Typ danych obsługiwane przy użyciu i wypełniając myEndpoint**:: xml** struktury.W tej strukturze myEndpoint reprezentuje rzeczywistą nazwę punktu końcowego, który jest używany podczas wystąpienia xml typu danych są przekazywane za pośrednictwem kodu po stronie klient.Ta struktura jest zadeklarowany w końcowym klasy proxy w sieci Web.

MyEndpoint**:: xml** struktury jest tworzony podczas dodawania lub aktualizacji sieci Web odwołanie do punktu końcowego, który opisuje metoda sieci Web w Visual Studio projektu.Jednak trzeba wypełnić początkowy generowane myEndpoint**:: xml** struktury w niestandardowej klasy proxy sieci Web odpowiednio, oparte na czy używasz maszynowy XML lub bez typu XML w kodzie aplikacji klient.

Dla pozostawiana xml Typ danych w sieci Web metody wystąpienia parametru myEndpoint**:: xml** struktury udostępnia je jako tablicy typu System.Xml.XmlNode w klasie proxy.Dlatego do przekazywania w xml wystąpienie parametru typu danych, ręcznie skonstruować i wypełnieniu tablicy węzłów XML lub najlepiej użyć System.Xml.XmlDocumentFragment w tym celu.Aby uzyskać więcej informacji, zobacz Praca z typem danych aplikacje klienckie programu Visual Studio xml.

Dla wpisane xml w metody sieci Web typ niestandardowy jest generowane w klasie proxy sieci Web i nazwany zgodnie z następującym formatem: Nazwa metoda, zaczynając od słowa Type i następnie następuje nazwa parametru.Na przykład metoda sieci Web jest wystawiony przy użyciu nazwy GetXmlInfo i xml Typ danych parametru o nazwie T dla przekazywania wpisany XML jako danych wejściowych, nazwę niestandardowego typu narażonych w klasie proxy sieci Web będzie GetXmlInfoTypeT.Ten typ niestandardowy dziedziczy z myEndpoint**:: xml** struktury, dlatego podobnie prezentuje ona maszynowy XML jako tablica System.Xml.XmlNode.

Obsługa xml Typ danych w kwerendach parametrycznych jest podobna do pracy z xml Typ danych metody sieci Web z jednym wyjątkiem: pismo XML muszą być przekazywane przez klient przy użyciu tego samego typu (myEndpoint**:: xml**), jest używana z danymi XML bez typu.

Po myEndpoint**:: xml** struktury jest gotowa, xml dane wystąpienie typu następnie może być udostępniany jako tablicę System.Xml.XmlNode w strukturze zdefiniowane i jest to z kolei zawarte w obrębie SqlParameter.Value obiektu.

Kwerenda parametryczna wymaga funkcji partia SQL.Może to obejmować następujące dodatkowe preparaty:

  • Punkt końcowy musi być włączone na nim SQL.Oznacza to, że partie = włączone został użyty podczas utworzenia lub modyfikacji punktu końcowego.

  • W klasie proxy sieci Web sqlbatch() Metoda zostanie uwzględniony odwołanie sieci Web jest dodane lub zaktualizowane dla partia-włączone punktu końcowego.

Wpisane parametry XML sqlbatch() metoda klasy proxy w sieci Web zostanie zaktualizowany ustawienia dodatkowe właściwości (XmlSchemaCollectionDatabase, XmlSchemaCollectionName, XmlSchemaCollectionOwningSchema) związane z rejestracją kolekcja schematu XML dla System.Data.SqlClient.SqlParameter obiektu.

Ostrzeżenie

Obie metody w sieci Web i sparametryzowana kwerend ujawniające xml typu danych, gdzie System.Data.DataSet jest zwracany w danych wyjściowych (w ramach tablicę obiektów) i jego zawartość jest umieszczana w DataGrid wizualizacji wyniki w klient aplikacji, DataSet nie jest używany typ serwera proxy sieci Web (myEndpoint:: xml) , ale środowisko CLR System.Data.SqlTypes.SqlXml wpisz zamiast.

Obsługa środowiska CLR typów zdefiniowanych przez użytkownika z aplikacji klienckich w sieci Web

Aby obsłużyć CLR typów zdefiniowanych przez użytkownika w aplikacji klient sieci Web, należy wykonać następujące czynności:

  1. Środowisko CLR zapisu typ zdefiniowany przez użytkownika i skompiluj go w bibliotece DLL, takich jak MyType.dll.

    W Visual Studio 2005, napisz środowiska CLR typ zdefiniowany przez użytkownika (klasa lub struct) i skompiluj go do wirtualny plik dziennika.wirtualny plik dziennika typu muszą być zgodne z SQL Server wymagania dotyczące wykonania przez użytkownika typów.Umożliwia to wirtualny plik dziennika zainstalowany i zarejestrowany na wystąpienie SQL Server.Aby uzyskać więcej informacji zobacz "Wymagania dla wykonania UDTs" in CLR typów zdefiniowanych przez użytkownika.

  2. Aby wygenerować serializatora XML pomocnika DLL, jeśli nie zaimplementowano IXMLSerializable, uruchom Sgen.exe typu wirtualny plik dziennika DLL.To będzie miał nazwę, taką jak MyType.XmlSerializers.dll.

    Oprócz spełnienia wymagań podstawowych dla środowiska CLR typ zdefiniowany przez użytkownika do pracy z SQL Server, środowisko CLR typ zdefiniowany przez użytkownika musi być także XML można serializować pracować z macierzystego usług XML sieci Web w SQL Server.Aby uzyskać więcej informacji zobacz "Serializacji XML" in CLR typów zdefiniowanych przez użytkownika.

  3. Instalowanie wirtualny plik dziennika typu DLL na wystąpienie z SQL Server za pomocą Tworzenie wirtualny plik dziennika.

    Jeśli implementuje IXMLSerializable i zakończonych kroku 2, należy także zainstalować serializatora XML companion biblioteki DLL w wystąpienie z SQL Server za pomocą Tworzenie zestawu.

  4. Środowisko CLR serializować typ zdefiniowany przez użytkownika w formacie XML i dołączyć go do myEndpoint**:: xml** struktury podobna do opisanej w poprzedniej sekcji.

    After the CLR user-defined type is installed at the server, to pass an instance of that CLR user-defined type into SQL Server from a Native XML Web Services client application, you first must serialize the CLR user-defined type into XML format and include it into an XML structure.

    Poniższy kod ilustruje sposób serializować CLR typ zdefiniowany przez użytkownika format XML i umieszcza je w XML element (System.Xml.XmlElement).

    // Create the user-defined type class on the client.
    SqlString s = new SqlString("0:0");
    UdtClientApp.Point pnt = Point.Parse(s);
    // Invoke the method and pass in a user-defined type.You will need
    // to convert this to XmlElement before you can pass it to SQL Server.
    System.IO.MemoryStream writer = new System.IO.MemoryStream();
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(UdtClientApp.Point));
    serializer.Serialize(writer, pnt);
    writer.Seek(0, System.IO.SeekOrigin.Begin);
    System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
    xmlDoc.Load(writer);
    System.Xml.XmlElement udtXml = xmlDoc.DocumentElement;
    
  5. W zależności od tego, czy środowisko CLR użytkownika typu znajduje się na klient, może być również konieczne deserializacji parametru wyjściowego z jego formatu XML zdefiniowany przez użytkownika typ CLR do jego typ zdefiniowany przez użytkownika format.

    Poniższy kod ilustruje, jak deserializować typ zdefiniowany przez użytkownika XML z powrotem do środowiska CLR typ zdefiniowany przez użytkownika w kodzie po stronie klient.W tym przykładzie środowiska CLR typ zdefiniowany przez użytkownika jest Point.

    Object[] results = proxy.GetPointUdt(Convert.ToInt16(textBox1.Text), ref udtXml);
    //Deserialze the XML into user-defined type.
    TextReader reader = new StringReader(udtXml.OuterXml);
    // pnt was already defined as UdtClientApp.Point pnt = Point.Parse(s);
    pnt = (UdtClientApp.Point) serializer.Deserialize(reader);
    

    Uwaga, że nie trzeba wykonywać ten proces deserializacji, jeśli używasz środowiska CLR typ zdefiniowany przez użytkownika jako XML bez klient.

CLR zdefiniowane przez użytkownika mogą również zostać przekazane jako parametry sparametryzowanych kwerend w taki sam sposób jak opisano dla xml typu danych.Środowisko CLR typ zdefiniowany przez użytkownika jego XML seryjny formularza muszą być przekazywane przez klient przy użyciu myEndpoint**:: xml** typu.

Z kwerendą parametryczną obejmuje CLR typy zdefiniowane przez użytkownika, są różne wartości zestaw na System.Data.SqlClient.SqlParameter struktury.Na przykład następujące ustawienia właściwość są używane CLR typy zdefiniowane przez użytkownika:

  • SqlDbType właściwość musi być zestaw na wartość Udt.

  • ClrTypeName właściwość musi być ustawiona na SQL Server kwalifikowana nazwa trzech części (mojabazadanych**.MySchema.**MyUdtType) z zainstalowanym typ zdefiniowany przez użytkownika jest zarejestrowana z SQL Server.