Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

# Hata: 101935 (SQLBUDT)

Belirtiler

Microsoft SQL Server 2005'te bir ortak dil çalışma zamanı (CLR) nesnesi kullandığınızda, aşağıdakine benzer bir hata iletisi alabilirsiniz:

Msg 6522, düzey 16, State 2, 1 satır
Kullanıcı tanımlı alışılmış veya toplama 'NesneAdı' yürütülmesi sırasında .NET Framework hata oluştu:
System.InvalidOperationException: dinamik olarak üretilen seri hale getirme derlemesi yüklenemiyor. Bazı barındırma ortamlarında derleme yükleme işlevi kısıtlanmıştır, önceden oluşturulan seri hale getirici kullanmayı düşünün. Lütfen daha fazla bilgi için iç özel duruma bakın. System.IO.FileLoadException--->: LoadFrom(), LoadFile(), Load(byte[]) ve LoadModule() devre dışı bırakıldı ana bilgisayar tarafından.
System.IO.FileLoadException:

System.Reflection.Assembly.nLoadImage adresindeki (Byte [] rawAssembly, Byte [] rawSymbolStore, kanıt, StackCrawlMark & stackMark, Boolean fIntrospection kanıtlayan bilgiler)
System.Reflection.Assembly.Load (Byte [] rawAssembly, Byte [] rawSymbolStore, kanıt securityEvidence)
Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (String [] dosya adları, CompilerParameters seçenekleri)
Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch (String [] kaynakları, CompilerParameters seçenekleri)
Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch (String [] kaynakları, CompilerParameters seçenekleri)
System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource at (CompilerParameters seçenekleri, String [] s
...
System.InvalidOperationException:
System.Xml.Serialization.Compiler.Compile (ana bütünleştirilmiş kod, dize ns, CompilerParameters parametreleri, kanıt kanıt)
System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping [] xmlMappings, tür [] türleri, dize defaultNamespace, kanıt kanıt, CompilerParameters parametreleri, derlemenin derleme, Hashtable derlemeler)
System.Xml.Serialization.TempAssembly... ctor kullanımına (XmlMapping [] xmlMappings, tür [] türleri, dize defaultNamespace, dize konumu, kanıt kanıt)
System.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping xmlMapping, türü, String defaultNamespace)
System.Xml.Serialization.XmlSerializer... ctor kullanımına (türü, String defaultNamespace)
System.Xml.Serialization.XmlSe at...

Örneğin, bir Web hizmeti çağrıları veya kullanıcı tanımlı türler SQL Server içinde XML dönüşümü gerçekleştiren bir CLR nesnesini kullandığınızda hata iletisi alabilirsiniz.

Neden

XML veri türü için bir CLR nesnesine dönüştürüldüğünde, bu sorun oluşur. Bu dönüştürme işlemi oluştuğunda, Windows Communication Foundation (eski kod adı "Indigo") aşağıdakileri yapmak çalışır:

  • Yeni bir XML seri hale getirme derlemesi oluşturur.

  • Derleme diske kaydedin.

  • Derleme geçerli uygulama etki alanına yükler.

Ancak, SQL Server SQL CLR içinde disk erişim güvenlik nedeniyle bu tür için izin vermez. Bu nedenle, "Belirtiler" bölümünde açıklanan hata iletisini alırsınız. XML veri türüne dönüştürmek CLR nesnesi çeşitli senaryolara neden olabilir.

Windows Communication Foundation hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:

http://msdn2.microsoft.com/en-us/library/ms735119.aspxAşağıdaki senaryolarda "Belirtiler" bölümünde açıklanan hata iletisini alabilirsiniz:

  • CLR nesneleri açıkça uygulayan CLR kodunda XmlSerializer sınıf kullanır. Bu CLR nesneleri, saklı yordamlar, İşlevler, kullanıcı tanımlı türler, toplamları ve tetikleyici içerebilir.

  • CLR kodunda bir Web hizmeti kullanın.

  • Gönderdiğiniz veya CLR nesneleri SQL Server veya SQL Server HTTP/SOAP doğrudan erişim kullanarak alırsınız.

  • CLR nesnesi bir kullanıcı tanımlı türü XML veri türüne dönüştürür.

Çözüm

Bu sorunu çözmek için XML seri hale getirici Oluşturucu aracını (Sgen.exe) XML seri hale getirme derlemesi oluşturmak için özgün derleme için el ile kullanmanız gerekir. Sonra bir SQL Server veritabanına derlemeler yükleyin.

Kod örneği

Örneğin, aşağıdaki kod örneği tarafından oluşturulan bir derleme kullanarak XML verilerini döndüren CLR işlevi oluşturmak isteyebilirsiniz:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString XMLTest()
{
Person p = new Person();
return new SqlString(p.GetXml());

}
public class Person
{
public String m_FirstName = "Jane";
public String m_LastName = "Dow";

public String GetXml()
{
XmlSerializer ser = new XmlSerializer(typeof(Person));
StringBuilder sb = new StringBuilder();
StringWriter wr = new StringWriter(sb);
ser.Serialize(wr, this);

return sb.ToString();
}

}
}

SQL Server Management Studio'da XMLTest işlevini çağırdığınızda aşağıdaki sonucu almayı beklersiniz:

<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m_FirstName>Jane</m_FirstName>
<m_LastName>Dow</m_LastName>
</Person>

Doğru sonuç için özgün derleme için XML seri hale getirme derlemesi el ile oluşturmanız gerekir. Seri hale getirme derlemesi el ile oluşturmak için aşağıdaki yöntemlerden birini kullanın.

Not: Bu yöntemler aşağıdaki koşulların doğru olduğunu varsayalım:

  • SQL Server 2005 örneği dbTest veritabanı oluşturduk.

  • Tüm proje dosyaları C:\CLRTest klasörüne kaydedilir.

Yöntem 1: Microsoft Visual Studio 2005 kullanarak SQL Server CLR projesi oluşturun.

Seri hale getirme derlemesi Microsoft Visual Studio 2005'te Build Events seçeneğini kullanarak oluşturabilirsiniz. Bunu yapmak için şu adımları izleyin:

  1. Visual Studio 2005'i başlatın.

  2. MyTest adlı yeni bir SQL Server projesi oluşturun.

  3. Veritabanı Başvuru Ekle iletişim kutusunda, dbTest veritabanına bağlanan Başvurusu'nu tıklatın ve sonra Tamam' ı tıklatın.

    Referans listesinde değilse, yeni bir başvuru oluşturmanız gerekir. Bunu yapmak için Yeni Başvuru Ekle'yitıklatın.

  4. Proje menüsünde, Add User-Defined işlevinitıklatın. Add New Item iletişim kutusu görüntülenir.

  5. Yeni bir dosya eklemek için Ekle ' yi tıklatın. Varsayılan olarak, dosya Function1.cs olarak adlandırılır.

    Not: Veritabanına proje dağıtmak ve aşağıdaki Transact-SQL deyimini çalıştırın, "Belirtiler" bölümünde açıklanan hata iletisini alırsınız:

    SELECT [dbTest].[dbo].[XMLTest] ()

    Bu sorunu gidermek için 6-16 adımları izlemeniz gerekir.

  6. Function1.cs dosyasına "Kod örneği" bölümünde listelenen kodu ekleyin.

  7. Proje menüsünde, MyTest özellikler' i tıklatın.

  8. MyTest iletişim kutusunda'ı tıklatın.
    Build Events seçeneği.

  9. Sonrası olay komut satırı oluştur iletişim kutusuna aşağıdaki komutu yazın:

    "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" / Force "$(TargetPath)"Not: / Force seçeneğini kaynak derlemesi her değiştirdiğinizde yeni bir seri hale getirme derlemesi oluşturur. Ayrıca, Visual Studio 2005 başka bir klasöre yüklediyseniz bu komut değiştirmelisiniz.

  10. C:\CLRTest klasöründe, Predeployscript.sql ve Postdeployscript.sql adlı iki metin dosyası oluşturun.

  11. Aşağıdaki Transact-SQL ifadeleri Predeployscript.sql dosyasına ekleyin:

    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    DROP ASSEMBLY [MyTest.XmlSerializers]
  12. Aşağıdaki Transact-SQL ifadeleri Postdeployscript.sql dosyasına ekleyin:

    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
  13. Proje menüsünde, Add Existing Item' ı tıklatın.

  14. Add Existing Item iletişim kutusunda, C:\CLRTest klasörünü bulun ve sonra tüm dosyalar (*. *)Dosya türü listesinde.

  15. Dosya adı kutusuna yazın.
    Postdeployscript.sql; Predeployscript.SQLve sonra'ı tıklatın.
    Tamam.

  16. Yapı menüsünde, MyTest Dağıt'ıtıklatın.

  17. SQL Server Management Studio'da aşağıdaki Transact-SQL deyimini çalıştırın:

    SELECT [dbTest].[dbo].[XMLTest] ()

    Doğru sonucu alırsınız.

Yöntem 2: Visual Studio komut istemi penceresinden bir SQL CLR projeyi derleyin

  1. C:\CLRTest klasörünü bulun.

  2. MyTest.cs adlı bir metin dosyası oluşturun.

  3. MyTest.cs dosyasına "Kod örneği" bölümünde listelenen kodu ekleyin.

  4. Visual Studio 2005 komut istemi penceresini açın.

  5. CD C:\CLRTestyazın ve ENTER tuşuna basın.

  6. CSC /t:library MyTest.csyazın ve ENTER tuşuna basın.

  7. SGen.exe/Force MyTest.dllyazın ve ENTER tuşuna basın.

  8. SQL Server Management Studio'da aşağıdaki Transact-SQL deyimlerini çalıştırın:

    USE dbTest
    GO
    CREATE ASSEMBLY [MyTest] from 'C:\CLRTest\MyTest.dll'
    GO
    CREATE ASSEMBLY [MyTest.XmlSerializers.dll] from 'C:\CLRTest\MyTest.XmlSerializers.dll'
    GO

    CREATE FUNCTION XMLTest()
    RETURNS nvarchar (max)
    AS
    EXTERNAL NAME MyTest.StoredProcedures.XMLTest
    GO
  9. SQL Server Management Studio'da aşağıdaki Transact-SQL deyimini çalıştırın:

    SELECT [dbTest].[dbo].[XMLTest] ()

    Doğru sonucu alırsınız.


Diğer derlemeler başvuran ana bütünleştirilmiş kod kullanırsanız, ana derleme tarafından başvurulan tüm derlemeler için XML seri hale getirme derlemelerinin oluşturmanız gerekir. Daha sonra bu XML seri hale getirme derlemelerinin derleme oluşturma deyimini kullanarak SQL Server veritabanına yüklemelisiniz.

Durum

Bu davranış normaldir.

Başvurular

CLR veritabanı Objects'in XML seri hale getirme hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:

http://msdn2.microsoft.com/en-us/library/ms131088.aspxXML seri hale getirici Oluşturucu aracı hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:

http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?

Geri bildiriminiz için teşekkürler!

×