Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ADO.NET DataSet , veri kaynağından bağımsız tutarlı bir ilişkisel programlama modeli sağlayan verilerin bellekte yerleşik bir gösterimidir. , DataSet tablolar arasındaki tabloları, kısıtlamaları ve ilişkileri içeren eksiksiz bir veri kümesini temsil eder.
DataSet veri kaynağından bağımsız olduğundan, uygulamasına DataSet yerel verileri ve birden çok veri kaynağından verileri içerebilir. Mevcut veri kaynaklarıyla etkileşim DataAdapter aracılığıyla kontrol edilmektedir.
SelectCommand özelliği, DataAdapter veri kaynağından veri alan bir Command nesnedir.
InsertCommand' nin UpdateCommand , DeleteCommandve DataAdapter özellikleri, içindeki verilerde yapılan değişikliklere göre veri kaynağındaki verilerde yapılan güncelleştirmeleri yöneten nesnelerdir CommandDataSet. Bu özellikler DataAdapters ile Veri Kaynaklarını Güncelleştirme bölümünde daha ayrıntılı olarak ele alınmıştır.
Fill yöntemi, DataAdapter öğesinin DataSetSelectCommand sonuçlarıyla bir DataAdapter doldurmak için kullanılır.
Fill argüman olarak doldurulacak bir DataSet, bir DataTable nesnesi veya DataTable öğesinden döndürülen satırlarla doldurulacak SelectCommand adını alır.
Uyarı
Bir tablonun tümünü almak için DataAdapter öğesini kullanmak zaman alır, özellikle de tabloda çok fazla satır varsa. Bunun nedeni veritabanına erişme, verileri bulup işleme ve ardından verileri istemciye aktarmanın zaman alıcı olmasıdır. Tablonun tümünü istemciye çekmek, sunucudaki tüm satırları da kilitler. Performansı geliştirmek için yan tümcesini WHERE kullanarak istemciye döndürülen satır sayısını büyük ölçüde azaltabilirsiniz. Ayrıca, yalnızca SELECT deyiminde gerekli sütunları açıkça listeleyerek istemciye döndürülen veri miktarını azaltabilirsiniz. Başka bir iyi geçici çözüm, satırları toplu olarak (bir kerede birkaç yüz satır gibi) getirmek ve yalnızca istemci mevcut grup ile işini bitirdiğinde bir sonraki toplu veriyi getirmektir.
Yöntem, Fill nesnesini örtük olarak kullanarak DataReader içindeki tabloları oluşturmak için kullanılan sütun adlarını ve türlerini, ve DataSet içindeki tabloların satırlarını doldurmak için verileri döndürürDataSet. Tablolar ve sütunlar yalnızca henüz mevcut değilse oluşturulur; aksi takdirde Fill mevcut DataSet şemayı kullanır. Sütun türleri, ADO.NET Veri Türü Eşlemeleri'ndeki tablolara göre .NET Framework türleri olarak oluşturulur. Birincil anahtarlar, veri kaynağında mevcut olmadığı ve DataAdapterolarakMissingSchemaAction ayarlanmadığıMissingSchemaActionAddWithKey sürece oluşturulmaz.
Fill bir tablo için birincil anahtarın mevcut olduğunu tespit ederse, birincil anahtar sütun değerlerinin veri kaynağından döndürülen satırlarla eşleştiği satırlar için DataSet içindeki verilerin üzerine, veri kaynağından alınan verilerle yazar. Birincil anahtar bulunmazsa, veriler DataSet içindeki tablolara eklenir.
Fill, DataSet öğesini doldururken mevcut olabilecek eşlemeleri kullanır (bkz. DataAdapter DataTable ve DataColumn Eşlemeleri).
Uyarı
SelectCommand bir OUTER JOIN sonucunu döndürürse, DataAdapter sonucu PrimaryKey için bir DataTable değeri ayarlamaz. Yinelenen satırların doğru çözümlendiğinden emin olmak için PrimaryKey öğesini kendiniz tanımlamanız gerekir. Daha fazla bilgi için bkz . Birincil Anahtarları Tanımlama.
Aşağıdaki kod örneği, Microsoft SQL Server SqlDataAdapter veritabanına bağlanmak için SqlConnection kullanan bir Northwind örneği oluşturur ve bir DataTable içindeki DataSet'i müşteri listesiyle doldurur. "SqlConnection oluşturucuya geçirilen SQL deyimi ve SqlDataAdapter bağımsız değişkenleri, SelectCommand özelliğini oluşturmak için SqlDataAdapter kullanılır."
Örnek
' Assumes that connection is a valid SqlConnection object.
Dim queryString As String = _
"SELECT CustomerID, CompanyName FROM dbo.Customers"
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
queryString, connection)
Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Uyarı
Bu örnekte gösterilen kod, Connection öğesini açıkça açmaz ve kapatmaz.
Fill yöntemi, bağlantı henüz açık değilse, Connection öğesinin kullandığı DataAdapter öğesini örtük olarak açar. Bağlantıyı Fill açtıysa, Fill bittiğinde bağlantıyı da kapatır. Bu, Fill veya Update gibi tek bir işlemle uğraştığınızda kodunuzu basitleştirebilir. Ancak, açık bir bağlantı gerektiren birden çok işlem gerçekleştiriyorsanız, veri kaynağı üzerinde işlemleri gerçekleştirmeden önce Open metodunu açıkça çağırarak ve işlemden sonra Connection metodunu çağırarak uygulamanızın Close performansını artırabilirsiniz. Kaynakları diğer istemci uygulamaları tarafından kullanılmak üzere boşaltmak için veri kaynağı bağlantılarını mümkün olduğunca kısa bir süre açık tutmaya çalışmanız gerekir.
Birden Çok Sonuç Kümesi
DataAdapter birden çok sonuç kümesiyle karşılaşırsa, içinde DataSetbirden çok tablo oluşturur. Tablolara Tablo0 için "Tablo" ile başlayan artımlı varsayılan TabloN adı verilir. Bir tablo adı Fill yöntemine bağımsız değişken olarak geçirilirse, tablolara artan sıralı bir varsayılan ad, örneğin "TableName0" için "TableName"den başlayarak TableNameN olarak verilir.
Birden Fazla DataAdapter Kullanarak Bir DataSet'i Doldurma
DataAdapter ile herhangi bir sayıda DataSet nesne kullanılabilir. Her DataAdapter biri bir veya daha fazla DataTable nesneyi doldurmak ve güncelleştirmeleri ilgili veri kaynağına geri çözümlemek için kullanılabilir.
DataRelation ve Constraint nesneleri yerel olarak eklenebilir DataSet ve bu sayede farklı veri kaynaklarından verileri ilişkilendirebilirsiniz. Örneğin, bir DataSet Microsoft SQL Server veritabanından, OLE DB aracılığıyla kullanıma sunulan bir IBM DB2 veritabanından ve XML akışı sağlayan bir veri kaynağından veri içerebilir. Bir veya daha fazla DataAdapter nesne her veri kaynağıyla iletişimi işleyebilir.
Örnek
Aşağıdaki kod örneği, Microsoft SQL Server'daki veritabanındaki Northwind müşterilerin listesini ve Microsoft Access 2000'de depolanan veritabanındaki Northwind siparişlerin listesini doldurur. Doldurulan tablolar bir DataRelationile ilişkilidir ve müşteri listesi bu müşterinin siparişleriyle birlikte görüntülenir. Nesneler hakkında DataRelation daha fazla bilgi için bkz. DataRelations Ekleme ve DataRelations'ta Gezinme.
' Assumes that customerConnection is a valid SqlConnection object.
' Assumes that orderConnection is a valid OleDbConnection object.
Dim custAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT * FROM dbo.Customers", customerConnection)
Dim ordAdapter As OleDbDataAdapter = New OleDbDataAdapter( _
"SELECT * FROM Orders", orderConnection)
Dim customerOrders As DataSet = New DataSet()
custAdapter.Fill(customerOrders, "Customers")
ordAdapter.Fill(customerOrders, "Orders")
Dim relation As DataRelation = _
customerOrders.Relations.Add("CustOrders", _
customerOrders.Tables("Customers").Columns("CustomerID"), _
customerOrders.Tables("Orders").Columns("CustomerID"))
Dim pRow, cRow As DataRow
For Each pRow In customerOrders.Tables("Customers").Rows
Console.WriteLine(pRow("CustomerID").ToString())
For Each cRow In pRow.GetChildRows(relation)
Console.WriteLine(vbTab & cRow("OrderID").ToString())
Next
Next
// Assumes that customerConnection is a valid SqlConnection object.
// Assumes that orderConnection is a valid OleDbConnection object.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", customerConnection);
OleDbDataAdapter ordAdapter = new OleDbDataAdapter(
"SELECT * FROM Orders", orderConnection);
DataSet customerOrders = new DataSet();
custAdapter.Fill(customerOrders, "Customers");
ordAdapter.Fill(customerOrders, "Orders");
DataRelation relation = customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow pRow in customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine(pRow["CustomerID"]);
foreach (DataRow cRow in pRow.GetChildRows(relation))
Console.WriteLine("\t" + cRow["OrderID"]);
}
SQL Server Decimal Türü
Varsayılan olarak, DataSet .NET Framework veri türlerini kullanarak verileri depolar. Çoğu uygulama için bunlar veri kaynağı bilgilerinin kullanışlı bir gösterimini sağlar. Ancak, veri kaynağındaki veri türü bir SQL Server ondalık veya sayısal veri türü olduğunda bu gösterim bir soruna neden olabilir. .NET Framework decimal veri türü en fazla 28 anlamlı basamağı sağlarken, SQL Server decimal veri türü 38 önemli basamağı izin verir.
SqlDataAdapter bir Fill işlemi sırasında, bir SQL Server decimal alanının hassasiyeti 28 karakterden büyük olduğunu belirlerse, geçerli satır DataTable eklenmez.
FillError Bunun yerine olay gerçekleşir ve bu da duyarlık kaybı yaşanıp gerçekleşmeyeceğini belirlemenize ve uygun şekilde yanıt vermenizi sağlar. Olay hakkında FillError daha fazla bilgi için bkz. DataAdapter Olaylarını İşleme. SQL Server decimal değerini almak için bir SqlDataReader nesnesi kullanabilir ve GetSqlDecimal yöntemini çağırabilirsiniz.
ADO.NET 2.0, System.Data.SqlTypes içinde DataSet için gelişmiş destek sunmuştur. Daha fazla bilgi için bkz . SqlTypes ve DataSet.
OLE DB Bölümleri
Hiyerarşik satır kümeleri veya bölümler (OLE DB türü DBTYPE_HCHAPTER, ADO türü adChapter) bir DataSetiçeriğini doldurmak için kullanılabilir.
OleDbDataAdapter bir işlem sırasında bölümlenmiş sütunla karşılaştığındaFill, bölümlenmiş sütun için bir DataTable oluşturulur ve bu tablo bölümdeki sütun ve satırlarla doldurulur. Bölümlenmiş sütun için oluşturulan tablo, hem üst tablo adı hem de "ParentTableNameChapteredColumnName" biçiminde bölümlenmiş sütun adı kullanılarak adlandırılır. içinde DataSet bölümlenmiş sütunun adıyla eşleşen bir tablo zaten varsa, geçerli tablo bölüm verileriyle doldurulur. Varolan bir tabloda bölümde bulunan bir sütunla eşleşen sütun yoksa, yeni bir sütun eklenir.
içindeki DataSet tablolar bölümlenmiş sütunlardaki verilerle doldurulmadan önce, hem üst hem de alt tabloya bir tamsayı sütunu eklenerek, üst sütun otomatik artırma olarak ayarlanarak ve her iki tablodan eklenen sütunlar kullanılarak bir oluşturularak hiyerarşik satır kümesinin üst ve alt tabloları arasında bir DataRelation ilişki oluşturulur. Eklenen ilişki, "ParentTableNameChapterColumnName" biçimindeki üst tablo ve bölüm sütun adları kullanılarak adlandırılır.
İlgili sütunun yalnızca DataSet içinde bulunduğuna dikkat edin. Veri kaynağından gelen sonraki dolgular, değişikliklerin varolan satırlarla birleştirilmesi yerine tablolara yeni satırların eklenmesine neden olabilir.
Ayrıca, DataAdapter.Fill ve DataTable parametrelerini kullanan aşırı yüklemeyi kullanırsanız, yalnızca o tablonun doldurulacağını unutmayın. Tabloya otomatik artan bir tamsayı sütunu yine eklenir, ancak hiçbir alt tablo oluşturulmaz veya doldurulmaz ve hiçbir ilişki kurulmaz.
Aşağıdaki örnek, bir müşteri listesindeki her müşteri için siparişlerin bölüm sütununu oluşturmak için MSDataShape Sağlayıcısı'nı kullanır. Ardından A DataSet , verilerle doldurulur.
Using connection As OleDbConnection = New OleDbConnection( _
"Provider=MSDataShape;Data Provider=SQLOLEDB;" & _
"Data Source=(local);Integrated " & _
"Security=SSPI;Initial Catalog=northwind")
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter( _
"SHAPE {SELECT CustomerID, CompanyName FROM Customers} " & _
"APPEND ({SELECT CustomerID, OrderID FROM Orders} AS Orders " & _
"RELATE CustomerID TO CustomerID)", connection)
Dim customers As DataSet = New DataSet()
adapter.Fill(customers, "Customers")
End Using
using (OleDbConnection connection = new OleDbConnection("Provider=MSDataShape;Data Provider=SQLOLEDB;" +
"Data Source=(local);Integrated Security=SSPI;Initial Catalog=northwind"))
{
OleDbDataAdapter adapter = new OleDbDataAdapter("SHAPE {SELECT CustomerID, CompanyName FROM Customers} " +
"APPEND ({SELECT CustomerID, OrderID FROM Orders} AS Orders " +
"RELATE CustomerID TO CustomerID)", connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
}
Fill İşlem tamamlandığında, DataSet iki tablo içerir: Customers ve CustomersOrdersburada CustomersOrders bölümlenmiş sütunu temsil eder. Tabloya Orders adlı Customers ek bir sütun ve tabloya CustomersOrders adlı CustomersOrders ek bir sütun eklenir.
Orders Tablodaki Customers sütun otomatik artırma olarak ayarlanır.
DataRelation, CustomersOrders, tablolara eklenen sütunlar kullanılarak Customers ana tablo olarak oluşturulur. Aşağıdaki tablolarda bazı örnek sonuçlar gösterilmektedir.
TableName: Müşteriler
| Müşteri Kimliği | Şirket Adı | Sipariş |
|---|---|---|
| ALFKI | Alfreds Futterkiste | 0 |
| ANATR | Ana Trujillo Sandviçler ve Dondurmalar | 1 |
TabloAdı: MüşterilerSiparişler
| Müşteri Kimliği | SiparişNo | MüşteriSiparişleri |
|---|---|---|
| ALFKI | 10643 | 0 |
| ALFKI | 10692 | 0 |
| ANATR | 10308 | 1 |
| ANATR | 10625 | 1 |