CommandBuilder nesnesini kullandığınızda System.NullReferenceException oluşuyor

Bu makale, nesnesini kullandığınızda CommandBuilder oluşan özel durumu çözmenize System.NullReferenceException yardımcı olur.

Orijinal ürün sürümü: Visual Basic .NET
Özgün KB numarası: 310367

Belirtiler

Nesne için CommandBuilder komutları açıkça almak için DataAdapter nesnesini aşağıdaki gibi kullanırsanız:

da.InsertCommand = cb.GetInsertCommand

Ardından aşağıdaki Visual Basic .NET kodunu çalıştırın:

cb.DataAdapter = Nothing

öğesine DataAdapter eklediğiniz komutlar silinir ve aşağıdaki hata iletisini alırsınız:

app_name.exe 'System.NullReferenceException' türünde işlenmeyen bir özel durum oluştu
Ek bilgi: Nesne başvurusu bir nesnenin örneğine ayarlanmadı.

Neden

CommandBuilder ile ilişkilendirildiğinde DataAdapter.CommandBuilder ve DataAdapter bağlı olduğunda oluşturduğu komutları siler; bağlantıları kaldırıldığında veya ilişkilendirildiğinde komutlar null olur. Bu sorun, en baştan oluşturduğunuz komutları etkilemez.

Çözüm

Bu sorunu çözmek için aşağıdaki yöntemlerden birini kullanın:

  • ile ilişkilendirmesini DataSetkaldırmayınCommandBuilder.
  • Komutları kod içinde veya Visual Data Tools aracılığıyla kendiniz oluşturun.

Durum

Bu davranış tasarımdan kaynaklanır.

Davranışı yeniden oluşturma adımları

  1. Yeni bir Visual Basic .NET Windows Uygulaması projesi oluşturun. Form1 varsayılan olarak projeye eklenir.

  2. Form1'e Düğme denetimi ekleyin.

  3. Kod görünümüne geçin ve Kod penceresinin en üstüne aşağıdaki kodu ekleyin:

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    
  4. Button olayına Click aşağıdaki kodu ekleyin:

    Dim con As New SqlConnection("server=myserver;uid=sa;pwd=mypassword;" & _
                                "database=northwind")
    Dim da As New SqlDataAdapter("Select * From Customers", con)
    Dim cb As New SqlCommandBuilder(da)
    Dim cmdInsert As New SqlCommand( _
            "Insert Into Customer (CustomerID) Value ('AAAAA')", con)
    da.InsertCommand = cmdInsert
    da.UpdateCommand = cb.GetUpdateCommand
    da.DeleteCommand = cb.GetDeleteCommand
    Debug.WriteLine(da.InsertCommand.CommandText)
    Debug.WriteLine(da.DeleteCommand.CommandText)
    cb.DataAdapter = Nothing ' Comment out this line to avoid the error.
    cb = Nothing
    Debug.WriteLine(da.InsertCommand.CommandText)
    Debug.WriteLine(da.DeleteCommand.CommandText)'Error occurs here.
    
  5. bağlantı dizesi ortamınıza uygun şekilde değiştirin.

  6. Uygulamayı derlemek ve çalıştırmak için F5 tuşuna basın.