-
شرح تفصيلي لـ C# DataSet وDataTable
2009-الخميس-21
1. قم بإنشاء كائن DataSet:
DataSet ds = new DataSet("DataSetName");
2. عرض البنية التي تم إنشاؤها عن طريق استدعاء SqlDataAdapter.Fill
da.Fill(ds،"Orders");
DataTable tbl = ds.Table[zero];
foreach (عمود DataColumn في tbl.Columns)
Console.WriteLine(col.ColumnName);
3. عرض البيانات التي تم إرجاعها بواسطة SqlDataAdapter ①، كائن DataRow
DataTable tbl = ds.Table[zero];
DataRowrow = tbl.Row[zero];
Console.WriteLine(ros["OrderID"]);
② التحقق من البيانات المخزنة في DataRow
DataTable tbl =row.Table;
foreach (عمود DataColumn في tbl.Columns)
Console.WriteLine(row[col]);
③ تحقق من كائن DataRow في DatTable
foreach (صف DataRow في tbl.Rows)
DisplayRow(row);
4. تحقق من البيانات الموجودة في DataSet ① تحقق من خصائص DataColumn: ReadOnly،allowDBNull، MaxLength، Unique
② يقيد تجميع كائنات DataTable: UiqueConstraints وPrimarykey وForeignkeyConstraints.
عادةً ليست هناك حاجة إلى إزعاج إنشاء ExternalkeyConstraints، لأنه يتم إنشاؤه عند إنشاء علاقة بين كائنين DataTable في DataSet.
③. استخدم طريقة SqlDataAdapter.Fill لاسترداد معلومات الطريقة
5. ترجمة التعليمات البرمجية لإنشاء كائنات DataTable
①.إنشاء كائن DataTable: DataTable tbl = new DataTable("TableName");
② أضف DataTable إلى تقارب الجدول لكائن DataSet
DataSet ds = new DataSet();
DataTable tbl = new DataTable("العملاء");
ds.Tables.Add(tbl);
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("العملاء");
يمكن أن تتواجد كائنات DataTable فقط في كائن DataSet واحد على الأكثر. إذا كنت تريد إضافة DataTable إلى مجموعات بيانات متعددة، فيجب عليك استخدام خطوة النسخ أو خطوة الاستنساخ. تقوم خطوة النسخ بإنشاء DataTable جديد له نفس بنية DataTable الأصلي ويحتوي على صفوف مشابهة؛ وتقوم خطوة الاستنساخ بإنشاء DataTable جديد له نفس بنية DataTable الأصلي ولكنه لا يحتوي على أي صفوف.
③. إضافة أعمدة إلى DataTable
DataTable tbl = ds.Tables.Add("Orders");
DataColumn col =tbl.Columns.Add("OrderID",typeof(int));
col.AllowDBNull = false;
col.MaxLength = خمسة؛
col.Unique = true;
tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};
عندما يجب تعيين مفتاح أساسي، يتم تعيينAllowDBNull تلقائيًا على False؛
④ التخلص من أعمدة الزيادة التلقائية
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Orders");
DataColumn col = tbl.Columns.Add("OrderID",typeof(int));
col.AutoIncrement = true;
col.AutoIncrementSeed = -1;
col.AutoIncrementStep = -1;
col.ReadOnly = true;
⑤ أضف أعمدة بناءً على التعبيرات
tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");
6. تعديل محتوى DataTable ①، إضافة DataRow جديد
DataRowrow = ds.Tables["Customers"].NewRow();
صف["معرف العميل"] = "ALFKI";
ds.Tables["العملاء"].Rows.Add(row);
object[] aValues ={"ALFKI"،"Alfreds"، "Anders"، "030-22222"}؛
da.Tables["Customers"].LoadDataRow(aValues,false);
② التصحيح قيد التقدم حاليًا
لا يؤدي تعديل محتويات الصف إلى تعديل المحتوى المقابل في قاعدة البيانات تلقائيًا. تعتبر التعديلات التي يتم إجراؤها على الصف تغييرات معلقة سيتم تسليمها لاحقًا إلى قاعدة البيانات باستخدام كائن SqlDataAdapter.
DataRow RowCustomer;
RowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
إذا (صف العميل == فارغ)
// لا تبحث عن العملاء
آخر
{
RowCustomer["CompanyName"] = "NewCompanyName";
RowCustomer["ContactName"] = "NewContactName";
}
// يوصى باستخدام هذا النموذج
DataRow RowCustomer;
RowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
إذا (صف العميل == فارغ)
// لا تبحث عن العملاء
آخر
{
RowCustomer.BeginEdit();
RowCustomer["CompanyName"] = "NewCompanyName";
RowCustomer["ContactName"] = "NewContactName";
RowCustomer.EndEdit();
}
// null يعني عدم تعديل البيانات الموجودة في هذا العمود
obejct[] aCustomer ={null, "NewCompanyName", "NewContactName", null}
DataRow RowCustomer;
RowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
RowCustomer.ItemArray = aCustomer;
③. التعامل مع القيمة الخالية لـ DataRow
//تحقق مما إذا كان فارغًا
DataRow RowCustomer;
RowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
إذا (rowCustomer.IsNull("الهاتف"))
Console.WriteLine("إنها فارغة");
آخر
Console.WriteLine("إنها ليست فارغة");
// منح قيمة فارغة
RowCustomer["Phone"] = DBNull.Value;
④ قم بإزالة DataRow
DataRow RowCustomer;
RowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
RowCustomer.Delete();
⑤
DataRowrowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
RowCustomer.ItemArray = aCustomer;
da.Tables["العملاء"].Remove(rowCustomer);
ربما
ds.Tables["العملاء"].RemoveAt(intIndex);
⑥ استخدم خصائص DataRow.RowState: بدون تغيير، منفصل، مضاف، معدل، محذوف
الفراغ الخاص DemonstrateRowState()
{ // قم بتشغيل دالة لإنشاء DataTable بعمود واحد DataTable myTable = MakeTable();
// إنشاء DataRow جديد myRow = myTable.NewRow(); // صف منفصل Console.WriteLine("New Row " + myRow.RowState);
myTable.Rows.Add(myRow); // صف جديد Console.WriteLine("AddRow " + myRow.RowState);
myTable.AcceptChanges(); // صف غير متغير Console.WriteLine("AcceptChanges" + myRow.RowState);
myRow["FirstName"] = "Scott"; // الصف المعدل Console.WriteLine("Modified " + myRow.RowState);
myRow.Delete(); // الصف المحذوف. Console.WriteLine("Deleted " + myRow.RowState });
⑦ تحقق من التغييرات المعلقة في DataRow
DataRow RowCustomer;
RowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
RowCustomer["CompanyName"] = "NewCompanyName";
سلسلة strNewCompanyName، strOldCompanyName؛
Console.WriteLine(rowCustomer["CompanyName"، DataRowVersion.Current]);
Console.WriteLine(rowCustomer["CompanyName", DataRowVersion.Original]);
1. مجموعة البيانات
①、السمات
حساسة لحالة الأحرف: تستخدم للتحكم فيما إذا كانت مقارنات السلسلة في DataTable حساسة لحالة الأحرف.
قمة
مصدر هذه المقالة:
شبكتي غير طبيعية
JavaException
DotnetException
أوراكل