Share via


Xml veri türü ve CLR kullanıcı tanımlı türler

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

İle başlayan, yerel XML Web HizmetleriSQL Server 2005, türleri gibi geçirerekxmlveri türü veya ortak dil çalýþma zamaný (CLR) kullanıcı tanımlı türler gerekir bazı ek geliştirme görevleri.Bu bölümde, XML Web hizmetleri tabanlı uygulamalar çalışmak üzere etkinleştirmek için gerçekleştirmeniz gereken görevler açıklanmıştırxmlve CLR kullanıcı tanımlı türü Web yöntemlerini ve parametreli sorgular.

Not

Kabul, temel de yerel XML Web hizmetleri dağıtma bilgisine sahipSQL Server.Bu bitiş noktaları oluşturma, SQL programlama olarak Web yöntemlerini kullanan ve temel Web istemci uygulamaları için yazma gibi görevler hakkında bilgi sahibi içerirSQL Serverkullanan diğer yerleşik SQL türü.Bu bilgileri gözden geçirin, görmek istediğiniz iseYerel XML Web Hizmetleri kavramları,Yerel XML Web hizmetleri dağıtma, veYerel XML Web hizmetlerini kullanmaya yönelik en iyi uygulamalar.

Web istemci uygulamaları, veri türü xml işleme

İçin bir Web istemci uygulamasının doğru şekilde işlemesinixmlbazı ayrıntılar veri türüne bağlı olan aşağıdaki senaryolardan biri olduğu üzerine:

  • Bir Web yöntem, bir son nokta olarak gösterilen bir saklı yordam ile çalışıyorsunuz.

  • SQL toplu iş iş iş kullandığınızı ( sqlbatch ) işlevi bir parametreleştirilmiş sorguyu. yürütmek için bitiş noktası

Bu senaryoların her ikisi de parametreli örneklerini gerektirenxmlveri türünü kullanarak ve doldurma işlenecek birmyEndpoint**::** xml yapısı.Bu yapı içindemyEndpoint , son nokta gerçek adını temsil eder, kullanılan örnekleri xmlveri türü geçirilen ile istemci tarafı kodu.Bu yapı, Web proxy sınıfının son nokta bildirilir.

The myEndpoint**::xml** structure is created when you add or update the Web reference to the endpoint that exposes the Web method in the Visual Studio project.Ancak olması oluşturulan ilk doldurmak içinmyEndpoint**:: özel Web proxy sınıfının xml** yapısında buna göre mi, yazılan bir XML veya türlenmemiş XML kullandığınız istemci tarafı uygulama kodunu.

Türlenmemiş içinxmlveri türü parametresi örneği Web yöntemleri,myEndpoint**:: xml** yapısı bunları bir dizi türü System.Xml.XmlNode proxy class. biçiminde sunar Nedenle de geçirmek için birxmlveri türü parametresi örnek, el ile oluşturmak ve bir dizi XML düğümleri, doldurun veya tercihen kullandığınızSystem.Xml.XmlDocumentFragment Bunu yapmak için. Daha fazla bilgi için bkz:Veri türü, Visual Studio istemci uygulamalarında xml ile çalışma.

İçin yazılanxmlWeb yöntemleri, özel bir tür Web proxy sınıfında ve aşağıdaki biçime göre adı: sözcüğü Typeve sonra bunu parametre. adı ile birleştirilmiş yöntem adı Örneğin, Web yönteminin adı kullanarak açıkGetXmlInfove birxmladlandırılmış parametre veri türüTWeb proxy sınıfında sunulan özel türün adını olması için geçirme yazılı giriş, XMLGetXmlInfoTypeT.Bu özel türü devraldığımyEndpoint**:: xml** yapısı, bu nedenle, aynı şekilde yazılan XML System.Xml.XmlNodebir dizi olarak sunar.

İşlemexmlParametrelendirilmiş sorgularda veri türü olan ile çalışmaya benzerxmlWeb yöntemi bir özel durum, veri türü: yazılı XML istemci ile aynı tür kullanarak geçirilmelidir ( myEndpoint :: xml ) türlenmemiş XML ile kullanılır.

SonramyEndpoint**:: xml** yapısı hazır, xmlveri türü örnek sonra kullandığı bir dizi gibi tanımlanmış yapısı ve bu System.Xml.XmlNodeSqlParameter.Valuenesne. içinde de dahil

Parametreli Sorgu, SQL toplu iş iş işlevlerini gerektirir.Bu, aşağıdaki ek hazırlıklar içerebilir:

  • Bitiş noktası SQL üzerinde etkinleştirilmiş olması gerekir.Toplu işlemi yani ENABLED = bitiş noktası oluşturulduğunda veya değiştirildiğinde, kullanıldı.

  • , Web proxy sınıfı,sqlbatch()yöntem olacaktır bulunan bir Web baþvurusu eklenen veya güncelleştirilen bir toplu iş etkin bitiş noktası.

Yazılı XML parametreleri,sqlbatch()Web proxy sınıfının yöntem, herhangi bir ek özellik ayarı içerecek şekilde güncelleştirilir ( XmlSchemaCollectionDatabase, XmlSchemaCollectionName, XmlSchemaCollectionOwningSchema), ilgili bir XML şema koleksiyon için kayıt içinSystem.Data.SqlClient.SqlParameter object.

Not

Her Web yöntemi ve açığa çıkaran sorguları belirlenmixmlveri türleri, burada birSystem.Data.DataSet (nesneler dizisi kapsamında) çıkış döndürülür ve içeriğini bir istemci uygulamasını, sonuçlar görmek için DataGrid biçiminde yerleştirilmiş DataSetWeb proxy türü kullanın ( myEndpoint :: yazın, ancak CLR ) System.Data.SqlTypes.SqlXml xml yerine.

CLR kullanıcı tanımlı türler Web istemci uygulamaları ile işleme

CLR türü kullanıcı tanımlı bir Web istemci uygulamasının içinde işlemek için aşağıdaki adımları tamamlamanız gerekir:

  1. Yazma CLR kullanıcı tanımlı türü ve MyType.dll gibi bir DLL dosyası içinde derlenir.

    InVisual Studio 2005, yazma CLR kullanıcı tanımlı tür (sınıf veya yapı), bir derleme. derleme veTürü derleme ile uyumlu olmalıdırSQL Servergereksinimleri uygulama kullanıcı tanımlı türler.Bu yüklü ve kayıtlı birleştirmesini sağlar bir örnek,SQL Server.Daha fazla bilgi için "gereksinimleri için uygulama UDTs", bkz:CLR kullanıcı tanımlı türler.

  2. Yoksa, not implemented bir XML seri hale getirici yardımcı DLL'si, oluşturmak içinIXMLSerializabletür derleme, sgen.exe çalıştırın. DLL.Bu MyType.XmlSerializers.dll gibi bir ad olacaktır.

    Toplantı için temel gereksinimleri yanı sıra CLR kullanıcı tanımlı türü çalışmakSQL Server, CLR kullanıcı tanımlı türü de XML de yerel XML Web Hizmetleri ile seri hale getirilebilir olmasıSQL Server.Daha fazla bilgi için "XML Serialization" konusuna bakınCLR kullanıcı tanımlı türler.

  3. Türü derleme DLL yükleme at the örnek ofSQL Serverkullanarak CREATE ASSEMBLY.

    İse, değil uygulamakIXMLSerializableve tamamlanan adım 2 ' de XML seri hale getirici yüklemeniz gerekecek companion DLL at the örnek ofSQL ServerkullanarakCREATE derleme.

  4. Serialize CLR kullanıcı tanımlı türü içine XML içine ve birmyEndpoint**:: önceki bölümün.** içinde anlatılan xml yapısına benzer

    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 XMLstructure.

    Seri hale getirmek için aşağıdaki kodda gösterildiği bir CLR kullanıcı tanımlı türü XML biçimi ve bir XML öğesine Yerleştir ( 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. CLR kullanıcı tanımlı türü istemci üzerinde yüklü olmasına göre da, CLR kullanıcı tanımlı türü XML biçiminden bir çıktı parametresi, kullanıcı tanımlı tür biçimine geri serisi olabilir.

    Aşağıdaki kod, bir kullanıcı tanımlı tür XML geri CLR kullanıcı tanımlı türü istemci tarafındaki kodda serisini gösterilmiştir.Bu örnekte, CLR kullanıcı tanımlı türü olanPoint.

    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);
    

    Not CLR kullanıyorsanız, bu seri kaldırma işlemi gerçekleştirmek gerekmediği kullanıcı tanımlı tür istemcide türlenmemiş XML olarak.

CLR kullanıcı tanımlı türler de geçirilen parametre olarak parametreleştirilmiş sorguya aynı şekilde için açıklananxmlveri türü.The CLR kullanıcı tanımlı türü XML sıralanmış biçimde gerekir geçirilen istemci tarafından kullanarakmyEndpoint**::xml** type.

CLR kullanıcı tanımlı türler içeren bir parametreleştirilmiş sorguyla, farklı değerler küme,System.Data.SqlClient.SqlParameter yapısı. Örneğin, aşağıdaki özellik ayarları, CLR kullanıcı tanımlı türler için kullanılır:

  • The SqlDbType property must be set to a value of Udt.

  • The ClrTypeName property must be set to the SQL Server three-part qualified name (MyDatabase**.MySchema.**MyUdtType) of the installed user-defined type as it is registered at the instance of SQL Server.