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.
Şunlar için geçerlidir: .NET Framework
.NET
.NET Standard
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 edilir.
SelectCommand özelliği, DataAdapter'nin veri kaynağından veri alan bir Command nesnesidir.
DataAdapter'nin InsertCommand, UpdateCommand ve DeleteCommand özellikleri, DataSet'deki verilerde yapılan değişikliklere göre veri kaynağındaki verilerin güncellenmesini yöneten Command nesneleridir. 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 SelectCommand sonuçlarıyla DataSet'yi doldurmak için kullanılır.
Fill'nin bağımsız değişkenleri, doldurulacak bir DataSet ve öğesinden döndürülen satırlarla doldurulacak olan DataTable adındaki DataTable nesnesini içerir.
Uyarı
DataAdapter kullanarak bir tablonun tamamını almak zaman alır, özellikle tabloda çok sayıda 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 sorgusunda gerekli sütunları açıkça listeleyerek istemciye döndürülen veri miktarını azaltabilirsiniz. Başka bir iyi çözüm, satırları toplu şekilde almak (örneğin bir seferde birkaç yüz satır) ve yalnızca istemci mevcut grubu tamamladığında bir sonraki grubu almaktır.
Fill yöntemi, DataReader nesnesini örtük olarak kullanarak DataSet içindeki tabloları oluşturmak için kullanılan sütun adlarını ve türlerini, ayrıca DataSet içindeki tabloların satırlarını doldurmak için verileri döndürür. 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. Bir tablonun birincil anahtara sahip olduğunu Fill belirlerse, birincil anahtar sütun değerlerinin veri kaynağından döndürülen satırlarla eşleştiği satırlarda, DataSet içindeki verileri, veri kaynağındaki verilerle üzerine yazar. Birincil anahtar bulunmazsa, veriler DataSet 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ğer ayarlamaz. Yinelenen satırların doğru çözümlenmiş olduğundan emin olmak için PrimaryKey'ı kendiniz tanımlamanız gerekir.
Aşağıdaki kod örneği, Microsoft SQL Server Northwind veritabanını kullanan bir SqlDataAdapter örneği oluşturur ve bir DataSet içindeki DataTable'ü müşteri listesiyle doldurur.
SqlConnection geçirilen SQL deyimi ve SqlDataAdapter bağımsız değişkenleri, SqlDataAdapter içindeki SelectCommand özelliğini oluşturmak için kullanılır.
Example
// 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, DataAdapter öğesinin kullandığı Connection bağlantısının henüz açık olmadığını bulursa, bağlantıyı örtük olarak açar.
Fill bağlantıyı açarsa, Fill bittiğinde bağlantıyı kapatır. Bu, tek bir işlemle uğraşırken, örneğin Fill veya Update ile, kodunuzu basitleştirebilir. Ancak, açık bağlantı gerektiren birden çok işlem gerçekleştiriyorsanız, Open yöntemini açıkça çağırarak Connection, veri kaynağında işlemleri gerçekleştirin ve ardından Close yöntemini çağırarak Connection 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 fazla sonuç kümesi
DataAdapter birden çok sonuç kümesiyle karşılaşırsa, içinde DataSetbirden çok tablo oluşturur. Tablolar için, Tablo0'dan başlayarak "Tablo" ile başlayan artımlı bir varsayılan ad olan TabloN verilir. Eğer bir tablo adı Fill metoduna bağımsız değişken olarak geçirilirse, tablolara "TableName0" için "TableName" ile başlayarak artan bir varsayılan ad olan TableNameN verilir.
Birden fazla DataAdapter'dan DataSet doldurma
Herhangi bir sayıda DataAdapter nesne DataSet ile 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.
Example
Aşağıdaki kod örneği, Microsoft SQL Server'daki veritabanındaki Northwind müşterilerin listesini ve Microsoft Access'te depolanan veritabanındaki siparişlerin Northwind listesini doldurur. Doldurulan tablolar bir DataRelationile ilişkilidir ve müşteri listesi bu müşterinin siparişleriyle birlikte görüntülenir.
// Assumes that customerConnection and orderConnection are valid SqlConnection objects.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", customerConnection);
SqlDataAdapter ordAdapter = new SqlDataAdapter(
"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 Ondalık türü
Varsayılan olarak, DataSet .NET 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 decimal veri türü en fazla 28 anlamlı basamağı sağlarken, SQL Server decimal veri türü 38 anlamlı basamağı sağlar.
SqlDataAdapter bir işlem sırasında bir Fill SQL Server decimal alanının duyarlığı 28 karakterden büyük olduğunu belirlerse, geçerli satır öğesine DataTableeklenmez.
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 ayrıca System.Data.SqlTypesDataSet için gelişmiş destek içerir. Daha fazla bilgi için bkz . SqlTypes ve DataSet.
Ayrıca bakınız
- Veri Adaptörleri (DataAdapters) ve Veri Okuyucular (DataReaders)
- ADO.NET'de veri türü eşlemeleri
- Birden Çok Etkin Sonuç Kümesi (MARS)
- SQL Server için Microsoft ADO.NET