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
DataSet
kaldı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ı
Yeni bir Visual Basic .NET Windows Uygulaması projesi oluşturun. Form1 varsayılan olarak projeye eklenir.
Form1'e Düğme denetimi ekleyin.
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
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.
bağlantı dizesi ortamınıza uygun şekilde değiştirin.
Uygulamayı derlemek ve çalıştırmak için F5 tuşuna basın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin