"Geçersiz arabellek alınan istemcisi'nden ” hata iletisinde, SQL Server .NET sağlayıcı sınıflarını kullandığınızda, SQL Server günlük

Makale çevirileri Makale çevirileri
Makale numarası: 827366 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

Microsoft .NET Framework SqlClient sınıf'ı kullandığınızda, Microsoft SQL Server 2000 hata günlüğüne aşağıdaki hata iletisini alırsınız:
Hata: 17805, önem derecesi: 20, durum: 3
Istemciden alınan geçersiz bir arabellek.
Microsoft .NET Framework istemci uygulamasında aşağıdaki ilgili hata iletilerini alırsınız:
System.Data.SqlClient.SqlException:, Geçerli komutunda ciddi BIR hata oluştu. The results, if any, should be discarded

Neden

Bu davranış, aşağıdaki senaryolardan biri doğruysa oluşur:
  • SqlClient sınıf C# yıkıcı veya Finalize yöntemi kullanın.
  • SqlParameter bir nesne oluşturduğunuzda, açık bir SQLDbType numaralandırma belirtmeyin. Açık bir SQLDbType numaralandırma, SQL Server için Microsoft .NET Framework veri sağlayıcısı belirtmezseniz, geçirilen verilerini temel alan doğru SQLDbType numaralandırma seçmek (SqlClient) çalışır. SqlClient başarısız olur.
  • Paylaşılan Visual Basic'te olması ya da statik C# için SqlClient sınıfının bir örneği olarak, bildirin. Birden çok uygulama iş parçacığında örnek aynı anda erişilebilir.

    Not Ek iş parçacığı uygulama kodu açıkça oluşturulmuş olsa bile <a0>ASP.NET</a0> ortamında veya diğer bazı ortamlarda, eşzamanlı erişim mümkündür.
  • .NET Framework kodunda açıkça belirttiğiniz parametre birden çok SQL Server'daki veri türü için kullanabileceğiniz en büyük boyutu boyutudur.

    Göre için (örneğin, SQL Server Books Online'da, nvarchar bir değişken uzunluklu Unicode karakter n karakter veridir. "n", 1 ile 4000 arasında bir değer olmalıdır. Yani birden fazla 4000 bir <a0>nvarchar</a0> parametresinin bir boyut belirtirseniz, "Belirtiler" bölümünde anlatılan hata iletisini alırsınız.
Aşağıdaki kod, bu hatalar ortaya çıkabilecek de gösterir:
Stored Procedure
--------------------------

CREATE PROCEDURE spParameterBug @myText Text AS
            Insert Into ParameterBugTable (TextField) Values (@myText)

Code
-------
static void Main(string[] args)
{
       string dummyText=string.Empty;
       for (int n=0; n < /*80*/ 3277; n++)   // change this to 80 to receive the second error that is mentioned earlier in this article.
       {
             dummyText += "0123456789";
       }

        // TO DO: Change data source to match your SQL Server:

       SqlConnection con= new SqlConnection("data source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;persist security info=True;packet size=16384");
       SqlCommand cmd = new SqlCommand("SpParameterBug", con);
      con.Open();
           // Causes error 17805:
      SqlParameter param2 =new SqlParameter("@myText", dummyText);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.Add(param2);
      try
      {
          cmd.ExecuteNonQuery();
      } 
      catch (Exception err)
      {
         Console.WriteLine(err.ToString());
      }

      Console.ReadLine();

}

Çözüm

Bu hataları gidermek için aşağıdakileri yaptığınızdan emin olun:
  • SqlClient sınıf C# yıkıcı veya Finalize yöntemi kullanmayın.
  • SqlDbType numaralandırma SqlParameter nesnesi için inferred tür olduğunu belirtin.
  • Sınırlar veri türünde bir parametre boyutu belirtin.

Referanslar

En büyük boyutu farklı veri türleri hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/aa276823(SQL.80).aspx
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx

Özellikler

Makale numarası: 827366 - Last Review: 18 Nisan 2007 Çarşamba - Gözden geçirme: 3.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 1.0
Anahtar Kelimeler: 
kbmt kbprb KB827366 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:827366

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com