OleDbDataAdapter.Fill Yöntem

Tanım

ADO Recordset veya nesnedekilerle DataSet eşleşecek şekilde içindeki satırları ekler veya Record yeniler.

Aşırı Yüklemeler

Fill(DataTable, Object)

Belirtilen DataTable ve ADO nesnelerini kullanarak ADO Recordset veya nesnedekilerle eşleşecek şekilde içindeki satırları DataTable ekler veya Record yeniler.

Fill(DataSet, Object, String)

belirtilen DataSet, ADO nesnesi ve kaynak tablo adını kullanarak ADO Recordset veya nesnedekilerle eşleşecek şekilde içindeki satırları DataSet ekler veya Record yeniler.

Fill(DataTable, Object)

Kaynak:
OleDbDataAdapter.cs
Kaynak:
OleDbDataAdapter.cs
Kaynak:
OleDbDataAdapter.cs

Belirtilen DataTable ve ADO nesnelerini kullanarak ADO Recordset veya nesnedekilerle eşleşecek şekilde içindeki satırları DataTable ekler veya Record yeniler.

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill (System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

Parametreler

dataTable
DataTable

Kayıtlarla doldurmak için bir DataTable ve gerekirse şema.

ADODBRecordSet
Object

ADO Recordset veya Record nesne.

Döndürülenler

başarıyla yenilenen DataTablesatır sayısı. Bu, satır döndürmeyen deyimlerin etkilediği satırları içermez.

Açıklamalar

ActiveX Veri Nesneleri (ADO) ile ADO.NET arasındaki bağlantı, ADO'dan öğesine veri kopyalayabilmeniz için DataSettek yönlü bir işlemdir, ancak verilerdeki tüm güncelleştirmelerin ADO.NET tarafından işlenmesi gerekir.

Yönteminin Fill bu aşırı yüklemesi, işlemin tamamlanmasından Fill sonra girişi Recordset kapatmaz.

Birden çok sonuç döndüren toplu SQL deyimlerini işlerken, OLE DB.NET Framework Veri Sağlayıcısı için bu FillSchema uygulaması Fill yalnızca ilk sonuç için şema bilgilerini alır.

İşlem, Fill içinde belirtilen hedef DataTable nesnesine DataSetsatırları ekler ve henüz yoksa nesnesini oluşturur DataTable . Bir DataTable nesne oluşturduğunuzda, Fill işlem normalde yalnızca sütun adı meta verilerini oluşturur. Ancak, özelliği olarak AddWithKeyayarlanırsaMissingSchemaAction, uygun birincil anahtarlar ve kısıtlamalar da oluşturulur.

yöntemini aynı DataTableüzerinde birden çok kez kullanabilirsinizFill. Birincil anahtar varsa, gelen satırlar zaten var olan eşleşen satırlarla birleştirilir. Birincil anahtar yoksa, gelen satırlar öğesine DataTableeklenir. Birincil anahtar bilgileri varsa, yinelenen satırlar uzlaştırılır ve içinde DataTable öğesine karşılık gelen DataSetyalnızca bir kez görüntülenir. Birincil anahtar bilgileri aracılığıyla, özelliğini belirterek PrimaryKey veya özelliği DataTableolarak AddWithKeyayarlanarak MissingSchemaAction ayarlanabilirFillSchema.

SelectCommand bir OUTER JOIN sonucunu döndürürse, DataAdapter sonucu DataTableiçin bir PrimaryKey değer ayarlamaz. Yinelenen satırların doğru çözümlenmiş olduğundan emin olmak için birincil anahtarı açıkça tanımlamanız gerekir. Daha fazla bilgi için bkz. Birincil Anahtarları Tanımlama.

OLE DB için .NET Framework Veri Sağlayıcısı ile doğru şekilde çalışabilmek için, AddWithKey yerel OLE DB sağlayıcısının DBPROP_UNIQUEROWS özelliğini ayarlayarak gerekli birincil anahtar bilgilerini almasını ve ardından içindeki DBCOLUMN_KEYCOLUMN inceleyerek hangi sütunların birincil anahtar sütunları olduğunu belirlemesini IColumnsRowsetgerektirir. Alternatif olarak, kullanıcı her DataTableüzerinde birincil anahtar kısıtlamalarını açıkça ayarlayabilir. Bu, mevcut kayıtlarla eşleşen gelen kayıtların eklenmek yerine güncelleştirilmesini sağlar.

bir doldurma DataTablesırasında yinelenen sütunlarla karşılaşırsa, "columnname1", "columnname2", "columnname3" vb. desenini kullanarak izleyen sütunlar için adlar oluşturur.OleDbDataAdapter İlk sütun için boş bir dize kullanılarak öğesine boş sütun adları eklenir DataTableve ardından sonraki boş sütunlar için "1", "2", "3" vb. eklenir.

ADO Recordset veya Record nesnelerdeki değerler, içindeki depolama için ortak dil çalışma zamanı türlerine DataSetdönüştürülür.

Dikkat

Yöntemin Fill bu aşırı yüklemesi, doldurma işlemi tamamlandığında ADO nesnesi üzerinde örtük olarak çağrı Close yapmaz. Bu nedenle, ADO Recordset veya Record nesneleri kullanmayı bitirdiğinizde her zaman çağırınClose. Bu, bir veri kaynağıyla temel alınan bağlantının zamanında yayınlanmasını sağlar ve ayrıca mevcut başvurular hala mevcut olduğunda yönetilmeyen ADO nesnelerinin çöp toplama tarafından geri alınması nedeniyle olası erişim ihlallerini önler.

üzerinde yöntemini DataAdapter çağırdığınızda TableMappings.Add ve kaynak tablo parametresini boş bir dizeyle açıkça eşlediğinizde, veri kümesi kaynak tablo kullanılarak başarıyla doldurulur, ancak veri kümesi hiçbir şey ile doldurulmayacak. Örneğin, aşağıdaki örnekte rDataSet hiçbir şey ile doldurulmayacak.

rAdapter.TableMappings.Add("source table", "");  
rAdapter.Fill(rDataSet, "source table");     

Bu örnekte, birden çok sonuçla çalışırken sonucu nasıl atlayabileceğiniz gösterilmektedir.

Aşağıdaki örnekte ADO Recordsetkullanarak doldurmak DataTable için bir kullanılırOleDbDataAdapter. Bu örnekte bir ADO Recordsetoluşturduğunuz varsayılır.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()  
     Dim custDS As DataSet = New DataSet  
     Dim custTable As DataTable = New DataTable("Customers")  
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))  
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))  
     custDS.Tables.Add(custTable)  
     'Use ADO objects from ADO library (msado15.dll) imported  
     ' as.NET library ADODB.dll using TlbImp.exe  
     Dim adoConn As ADODB.Connection = New ADODB.Connection()  
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)  
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)  
     custDA.Fill(custTable, adoRS)  
     adoRS.Close()  
     adoConn.Close()  
OleDbDataAdapter custDA = new OleDbDataAdapter();  
     DataSet custDS = new DataSet();  
     DataTable custTable = new DataTable("Customers");  
     custTable.Columns.Add("CustomerID", typeof(String));  
     custTable.Columns.Add("CompanyName", typeof(String));  
     custDS.Tables.Add(custTable);  
     //Use ADO objects from ADO library (msado15.dll) imported  
     //  as.NET library ADODB.dll using TlbImp.exe  
     ADODB.Connection adoConn = new ADODB.Connection();  
     ADODB.Recordset adoRS = new ADODB.Recordset();  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);  
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);  
     custDA.Fill(custTable, adoRS);  
     adoRS.Close();  
     adoConn.Close();  

Ayrıca bkz.

Şunlara uygulanır

Fill(DataSet, Object, String)

Kaynak:
OleDbDataAdapter.cs
Kaynak:
OleDbDataAdapter.cs
Kaynak:
OleDbDataAdapter.cs

belirtilen DataSet, ADO nesnesi ve kaynak tablo adını kullanarak ADO Recordset veya nesnedekilerle eşleşecek şekilde içindeki satırları DataSet ekler veya Record yeniler.

public:
 int Fill(System::Data::DataSet ^ dataSet, System::Object ^ ADODBRecordSet, System::String ^ srcTable);
public int Fill (System.Data.DataSet dataSet, object ADODBRecordSet, string srcTable);
override this.Fill : System.Data.DataSet * obj * string -> int
Public Function Fill (dataSet As DataSet, ADODBRecordSet As Object, srcTable As String) As Integer

Parametreler

dataSet
DataSet

Kayıtlarla doldurmak için bir DataSet ve gerekirse şema.

ADODBRecordSet
Object

ADO Recordset veya Record nesne.

srcTable
String

Tablo eşlemeleri için kullanılan kaynak tablo.

Döndürülenler

içine başarıyla eklenen veya içinde DataSetyenilenen satır sayısı. Bu, satır döndürmeyen deyimlerin etkilediği satırları içermez.

Özel durumlar

Kaynak tablo geçersiz.

Açıklamalar

ActiveX Veri Nesneleri (ADO) ile ADO.NET arasındaki bağlantı, ADO'dan öğesine veri kopyalayabilmeniz için DataSettek yönlü bir işlemdir, ancak verilerdeki tüm güncelleştirmelerin ADO.NET tarafından işlenmesi gerekir.

yöntemiFill, üzerinde yöntemini Recordsetçağırarak NextRecordset birden çok sonuç arasında yinelenir ve işlemin tamamlanmasının Fill ardından girişi Recordset kapatır.

İşlem, Fill içinde belirtilen hedef DataTable nesnesine DataSetsatırları ekler ve henüz yoksa nesnesini oluşturur DataTable . Bir DataTable nesne oluşturduğunuzda, Fill işlem normalde yalnızca sütun adı meta verilerini oluşturur. Ancak, özelliği olarak AddWithKeyayarlanırsaMissingSchemaAction, uygun birincil anahtarlar ve kısıtlamalar da oluşturulur.

Birincil anahtar bilgileri varsa, yinelenen satırlar uzlaştırılır ve içinde DataTable öğesine karşılık gelen DataSetyalnızca bir kez görüntülenir. Birincil anahtar bilgileri aracılığıyla, özelliğini belirterek PrimaryKey veya özelliği DataTableolarak AddWithKeyayarlanarak MissingSchemaAction ayarlanabilirFillSchema.

OLE DB için .NET Framework Veri Sağlayıcısı ile doğru şekilde çalışabilmek için, AddWithKey yerel OLE DB sağlayıcısının DBPROP_UNIQUEROWS özelliğini ayarlayarak gerekli birincil anahtar bilgilerini almasını ve ardından IColumnsRowset içindeki DBCOLUMN_KEYCOLUMN inceleyerek hangi sütunların birincil anahtar sütunları olduğunu belirlemesini gerektirir. Alternatif olarak, kullanıcı her DataTableüzerinde birincil anahtar kısıtlamalarını açıkça ayarlayabilir. Bu, mevcut kayıtlarla eşleşen gelen kayıtların eklenmesi yerine güncelleştirilmesini sağlar.

SelectCommand bir OUTER JOIN sonucunu döndürürse, DataAdapter sonucu DataTableiçin bir PrimaryKey değer ayarlamaz. Yinelenen satırların doğru çözümlenmiş olduğundan emin olmak için birincil anahtarı açıkça tanımlamanız gerekir. Daha fazla bilgi için bkz. Birincil Anahtarları Tanımlama.

Recordset işlemi başlamadan Fill önce kapatılırsa hata sonucu olmaz. Bu, birden çok sonucu işlemek için gereklidir, çünkü satır döndürmeyen sorgular kapalı Recordsetbir ile gösterilir. yalnızca OleDbDataAdapter kapalı Recordset öğesini çağırır NextRecordset ve işlemeye devam eder.

Veri kümesi doldurulırken bir hatayla karşılaşılırsa, hatanın oluşmasından önce eklenen satırlar içinde DataSetkalır. İşlemin geri kalanı durduruldu.

Nesnesi bir DataTabledoldurma sırasında yinelenen sütunlarla karşılaşırsa, "columnname1", "columnname2", "columnname3" vb. desenini kullanarak izleyen sütunlar için adlar oluşturur.DbDataAdapter Gelen veriler adsız sütunlar içeriyorsa, "Sütun1", "Sütun2" vb. desenine göre yerleştirilir DataSet . Her sonuç kümesine DataSet birden çok sonuç kümesi eklendiğinde ayrı bir tabloya yerleştirilir. Ek sonuç kümeleri belirtilen tablo adına integral değerleri eklenerek adlandırılır (örneğin, "Tablo", "Tablo1", "Tablo2" vb.). Sütun ve tablo adlarını kullanan uygulamalar, bu adlandırma desenleriyle çakışmaların oluşmadığından emin olmalıdır.

ADO Recordset veya Record nesnelerdeki değerler, içindeki depolama için ortak dil çalışma zamanı türlerine DataSetdönüştürülür.

Not

Yöntemin Fill bu aşırı yüklemesi, doldurma işlemi tamamlandığında ADO nesnesi üzerinde örtük olarak çağrılar Close .

Aşağıdaki örnek, OleDbDataAdapter ADO Record nesnesi olan bir DataSet ADO Recordset kullanarak doldurmak için bir kullanır. Bu örnekte bir ADO RecordSet ve Record nesnesi oluşturduğunuz varsayılır.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()  
     Dim custDS As DataSet = New DataSet  
     'Use ADO objects from ADO library (msado15.dll) imported  
     ' as.NET library ADODB.dll using TlbImp.exe  
     Dim adoConn As ADODB.Connection = New ADODB.Connection()  
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)  
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)  
     custDA.Fill(custDS, adoRS, "Customers")  
     adoConn.Close()  
OleDbDataAdapter custDA = new OleDbDataAdapter();  
     DataSet custDS = new DataSet();  
     //Use ADO objects from ADO library (msado15.dll) imported  
     // as.NET library ADODB.dll using TlbImp.exe  
     ADODB.Connection adoConn = new ADODB.Connection();  
     ADODB.Recordset adoRS = new ADODB.Recordset();  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);  
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);  
     custDA.Fill(custDS, adoRS, "Customers");  
     adoConn.Close();  

Ayrıca bkz.

Şunlara uygulanır