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.
Ek açıklamalar, temel şemayı değiştirmeden yazdığınız DataSet öğelerin adlarını değiştirmenize olanak tanır. Temel şemanızdaki öğelerin adlarını değiştirmek, yazılanın DataSet veri kaynağında bulunmayan nesnelere başvurmasına ve veri kaynağında var olan nesnelere başvuruyu kaybetmesine neden olabilir.
Ek açıklamaları kullanarak, yazdığınız DataSet nesnelerin adlarını daha anlamlı adlarla özelleştirerek kodu daha okunabilir ve istemcilerin DataSet kullanmasını kolaylaştırırken, temel alınan şemayı olduğu gibi bırakabilirsiniz. Örneğin, Northwind veritabanının Customers tablosu için aşağıdaki şema öğesi, bir DataRow nesne adını CustomersRow ve DataRowCollection adı olarak Müşteriler ile sonuçlanır.
<xs:element name="Customers">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerID" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
DataRowCollection adı Customers istemci kodunda anlamlıdır, ancak DataRow adı CustomersRow yanıltıcıdır çünkü tek bir nesnedir. Ayrıca, yaygın senaryolarda, nesne tanımlayıcı olmadan Row adlandırılır ve bunun yerine yalnızca nesne Customer olarak adlandırılır. Çözüm, şemaya ek açıklama eklemek ve DataRow ve DataRowCollection nesneleri için yeni adlar belirlemektir. Aşağıda, önceki şemanın açıklamalı sürümü yer alır.
<xs:element name="Customers" codegen:typedName="Customer" codegen:typedPlural="Customers">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerID" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
Bir typedNameCustomer değeri belirtilmesi, DataRow nesne adı olarak Customer ile sonuçlanacaktır.
typedPlural değerinin Customers olarak belirtilmesi, DataRowCollection adını korur .
Aşağıdaki tabloda, kullanılabilecek ek açıklamalar gösterilmektedir.
| Açıklama | Açıklama |
|---|---|
| typedName | Nesnenin adı. |
| typedPlural | Nesne koleksiyonunun adı. |
| typedParent | Üst öğe ilişkisi bağlamında bahsedildiğinde nesnenin adı. |
| typedChildren | Alt ilişkiden nesne döndürme yönteminin adı. |
| nullValue | Altındaki değer DBNull ise değer. Ek açıklamalar için nullValue aşağıdaki tabloya bakın. Varsayılan değer _throw. |
Aşağıdaki tabloda, ek açıklama için belirtilebilen değerler gösterilmektedir nullValue .
| "nullValue" Değeri | Açıklama |
|---|---|
| Değiştirme Değeri | Döndürülecek değeri belirtin. Döndürülen değerin öğenin türüyle eşleşmesi gerekir. Örneğin, null tamsayı alanları için 0 döndürmek için kullanın nullValue="0" . |
| _atmak | Özel durum oluşturma. Varsayılan değer budur. |
| _sıfır | Null bir başvuru döndür veya ilkel bir türle karşılaşılırsa bir istisna fırlat. |
| _boş | Dizeler için String.Empty döndür, aksi takdirde boş bir oluşturucudan oluşturulan bir nesneyi döndür. İlkel bir türle karşılaşılırsa, özel bir durum oluşturun. |
Aşağıdaki tabloda, yazılan DataSet nesneler için varsayılan değerler ve kullanılabilir ek açıklamalar gösterilmektedir.
| Nesne/Yöntem/Olay | Varsayılan | Açıklama |
|---|---|---|
| DataTable | TabloAdiVeriTablosu | typedPlural |
| DataTable Yöntemler | NewTableNameRow TabloAdıSatırıEkle TabloAdıSatırınıSil |
yazılanAd |
| DataRowCollection | Tablo Adı | typedPlural |
| DataRow | TabloAdıSatırı | yazılanAd |
| DataColumn | DataTable.ColumnNameColumn DataRow.ColumnName |
yazılanAd |
| Emlak | ÖzellikAdı | yazılanAd |
| Çocuk Erişim Sağlayıcı | GetChildTableNameRows | Tipli Çocuklar |
| Ebeveyn Erişimci | TabloAdıSatırı | TypedEbeveyn |
| DataSet Olaylar | TabloAdıSatırDeğişimOlayı TabloAdıSatırDeğişikliğiOlayİşleyici |
yazılanAd |
Yazılan DataSet ek açıklamaları kullanmak için XML Şema tanım dili (XSD) şemanıza aşağıdaki xmlns başvuruyu eklemeniz gerekir. Veritabanı tablolarından xsd oluşturmak için bkz WriteXmlSchema . veya Visual Studio'da Veri Kümeleriyle Çalışma.
xmlns:codegen="urn:schemas-microsoft-com:xml-msprop"
Aşağıda, Northwind veritabanının Customers tablosunu, Orders tablosuyla ilişkili olacak şekilde gösteren örnek bir açıklamalı şema verilmiştir.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CustomerDataSet"
xmlns:codegen="urn:schemas-microsoft-com:xml-msprop"
xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="CustomerDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Customers" codegen:typedName="Customer" codegen:typedPlural="Customers">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerID"
codegen:typedName="CustomerID" type="xs:string" minOccurs="0" />
<xs:element name="CompanyName"
codegen:typedName="CompanyName" type="xs:string" minOccurs="0" />
<xs:element name="Phone" codegen:typedName="Phone" codegen:nullValue="" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Orders" codegen:typedName="Order" codegen:typedPlural="Orders">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderID" codegen:typedName="OrderID"
type="xs:int" minOccurs="0" />
<xs:element name="CustomerID"
codegen:typedName="CustomerID" codegen:nullValue="" type="xs:string" minOccurs="0" />
<xs:element name="EmployeeID"
codegen:typedName="EmployeeID" codegen:nullValue="0"
type="xs:int" minOccurs="0" />
<xs:element name="OrderAdapter"
codegen:typedName="OrderAdapter" codegen:nullValue="1980-01-01T00:00:00"
type="xs:dateTime" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1">
<xs:selector xpath=".//Customers" />
<xs:field xpath="CustomerID" />
</xs:unique>
<xs:keyref name="CustOrders" refer="Constraint1"
codegen:typedParent="Customer" codegen:typedChildren="GetOrders">
<xs:selector xpath=".//Orders" />
<xs:field xpath="CustomerID" />
</xs:keyref>
</xs:element>
</xs:schema>
Aşağıdaki kod örneği, örnek şemadan oluşturulmuş güçlü şekilde tiplenmiş DataSet kullanır. Her bir tabloyu doldurmak için bir SqlDataAdapter kullanır ve diğer tabloyu doldurmak için de başka bir SqlDataAdapter kullanır. Kesin olarak yazılan
' Assumes a valid SqlConnection object named connection.
Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT CustomerID, CompanyName, Phone FROM Customers", &
connection)
Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT OrderID, CustomerID, EmployeeID, OrderAdapter FROM Orders", &
connection)
' Populate a strongly typed DataSet.
connection.Open()
Dim customers As CustomerDataSet = New CustomerDataSet()
customerAdapter.Fill(customers, "Customers")
orderAdapter.Fill(customers, "Orders")
connection.Close()
' Add a strongly typed event.
AddHandler customers.Customers.CustomerChanged, &
New CustomerDataSet.CustomerChangeEventHandler( _
AddressOf OnCustomerChanged)
' Add a strongly typed DataRow.
Dim newCustomer As CustomerDataSet.Customer = _
customers.Customers.NewCustomer()
newCustomer.CustomerID = "NEW01"
newCustomer.CompanyName = "My New Company"
customers.Customers.AddCustomer(newCustomer)
' Navigate the child relation.
Dim customer As CustomerDataSet.Customer
Dim order As CustomerDataSet.Order
For Each customer In customers.Customers
Console.WriteLine(customer.CustomerID)
For Each order In customer.GetOrders()
Console.WriteLine(vbTab & order.OrderID)
Next
Next
Private Shared Sub OnCustomerChanged( _
sender As Object, e As CustomerDataSet.CustomerChangeEvent)
End Sub
// Assumes a valid SqlConnection object named connection.
SqlDataAdapter customerAdapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName, Phone FROM Customers",
connection);
SqlDataAdapter orderAdapter = new SqlDataAdapter(
"SELECT OrderID, CustomerID, EmployeeID, OrderAdapter FROM Orders",
connection);
// Populate a strongly typed DataSet.
connection.Open();
CustomerDataSet customers = new CustomerDataSet();
customerAdapter.Fill(customers, "Customers");
orderAdapter.Fill(customers, "Orders");
connection.Close();
// Add a strongly typed event.
customers.Customers.CustomerChanged += new
CustomerDataSet.CustomerChangeEventHandler(OnCustomerChanged);
// Add a strongly typed DataRow.
CustomerDataSet.Customer newCustomer =
customers.Customers.NewCustomer();
newCustomer.CustomerID = "NEW01";
newCustomer.CompanyName = "My New Company";
customers.Customers.AddCustomer(newCustomer);
// Navigate the child relation.
foreach(CustomerDataSet.Customer customer in customers.Customers)
{
Console.WriteLine(customer.CustomerID);
foreach(CustomerDataSet.Order order in customer.GetOrders())
Console.WriteLine("\t" + order.OrderID);
}
protected static void OnCustomerChanged(object sender, CustomerDataSet.CustomerChangeEvent e)
{
}