ВИЗУАЛЬ ПРОГРАМЧЛАЛ II
Тогтохын Гантөр
ADO.NET
ADO.NET ХОЛБООГҮЙ ЗАГВАР
Лекц №5, 6
ХИЧЭЭЛИЙН АГУУЛГА:
холбоогүй загварын онцлог
 DataSet, түүний бүрэлдэхүүн объектууд
 DataAdapter объект
 Объектуудын ха...
ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ
Холбоогүй загвар (Disconnected Model) гэдэг нь
өгөгдлийг өгөдлийн эх үүсвэрээс клиент ма...
ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ


Холбоогүй загварыг ашиглаж, өгөгдлийн клиент
машин дээр байрлуулснаар сервэрийн санах...
ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд
DataSet– хоорондоо хамаарал бүхий DataTable
хүснэгтүүдийг агуулсан, санах о...
ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд

DataAdapter - өгөгдлийг DataSet –рүү ачаалах,
өгөгдөл дээр хийсэн өөрчлөлт...
DataAdapter объект
DataAdapter объект нь өгөгдлийн эх үүсвэр
болон завсарын эх үүсвэр (DataSet, DataTable )
хоѐрын хооронд...
DataAdapter объект

Анхны
DataSet

өөрчлөх

Өөрчлөлсөн
DataSet

Fill()

DataAdapter

Өгөгдлийн
эх үүсвэр

Update()

Багш: ...
DataAdapter объект
DataAdapter объектыг үүсгэх


SQL илэрхийлэл тодорхойлон үүсгэх
String connString = “Data Source = (lo...
DataAdapter объект
DataAdapter объектыг үүсгэх


Command объект тодорхойлон үүсгэх
String connString= “Data Source=(local...
DataSet объект


DataSet объект нь өгөгдлүүдийг агуулах,
хоорондоо холбогдсон хүснэгтүүдийн санах ой
дахь дүрслэл буюу са...
DataAdapter объект
DataSet объектыг үүсгэх

DataSet
DataTableCollection

DataRow
DataColumn

DataTabel

DataRelationCollec...
DataSet объект
DataSet объект нь дараах хоѐр төрлийнх байна.




Хэлбэржүүлсэн DataSet (Typed Dataset)DataSet классаас у...
DataSet объект
DataSet объектыг үүсгэх


DataSet классын байгуулагч функцийн
тусламжтайгаар үүсгэнэ.
DataSet ds = new Dat...
DataTable объект
DataSet объект нь DataTableCollection объект
дахь DataTable объектуудыг агуулах ба тэдгээр
нь DataSet объ...
DataTable объект
Хүснэгт үүсгэн, DataSet объетод нэмэх

DataSet ds = new DataSet(“MyDataSet”);


DataTable dt= new DataTa...
DataTable объект
Хүснэгттэй ажиллах

DataSet объект дахь хүснэгтүүдэд дараах
аргуудаар хандаж ажиллана.
 Нэрээр
DataTable...
DataTable объект
Хүснэгттэй ажиллах


DataSet объект дахь хүснэгтийн тоог буцаах




DataSet объектод өгөгдсөн нэртэй х...
DataTable объект
Хүснэгттэй ажиллах


DataSet объектоос хүснэгтүүдийг устгах


DataTable dt= ds.Tables.Add(“MyTable”);
d...
DataColumn объект
DataTable объект нь DataColumnCollection
объект дахь DataColumn объектуудыг агуулах
ба тэдгээр нь DataTa...
DataColumn объект
Багана үүсгэн, хүснэгтэд нэмэх
DataTable dt= new DataTable(“MyTable”);
 DataColumn col= new DataColumn ...
DataColumn объект
Багана үүсгэн, хүснэгтэд нэмэх
DataTable dt = new DataTable(“MyTable”);
 DataColumn col2 = new DataColu...
DataColumn объект
Багана үүсгэн, хүснэгтэд нэмэх
DataTable dt = new DataTable(“MyTable”);
 DataColumn col = new DataColum...
DataColumn объект
Автоматаар нэмэгдэх утгатай баган үүслэх
DataTable dt = new DataTable(“MyTable”);
 DataColumn col = new...
DataColumn объект
Тооцоологдох утгатай багана нэмэх
DataTable dt = new DataTable(“MyTable”);
 DataColumn[] dc = new DataC...
DataRow объект
DataRow объект нь DataTable объектын нэг
мөрийг илэрхийлнэ.
 DataTable объектын нэг мөр бичлэгийг утсгах,
...
DataRow объект
Мөр үүсгэн, хүснэгтэд нэмэх

DataTable dt= new DataTable();
dt.Columns.Add(“MyColumn”,typeof(System.String)...
DataRow объект
Бичлэг засварлах

1 -р арга: Тухайн бичлэгийн багананд хандах
замаар
DataRow row;
// талбарт индексаар ханд...
DataRow объект
Бичлэг засварлах
2-р арга: дараах методуудын тусламжтайгаар




BeginEdit() - засварлах горимыг эхлүүлнэ...
DataRow объект
Бичлэг засварлах
DataTable dt = new DataTable();
// DataTable объектод өгөгдөл ачаалах код
DataRow row = dt...
DataRow объект
Бичлэгт хийсэн өөрчлөлтийг зөвшөөрөх ба цуцлах
DataRow- д өөрчлөлт хийсэн үед ADO.NET нь
өөрчлөлтийг хүлээх...
DataRow объект
Бичлэгийн төлвийн мэдээллийг ашиглах
DataRow-д хийгдсэн өөрчлөлтийн мэдээллийг
авахдаа DataRow объектын Row...
DataRow объект
Бичлэгийн төлвийн мэдээллийг ашиглах
DataTable dt = new DataTable();
dt.Columns.Add(“MyColumn”, typeof(Syst...
DataRow объект
Бичлэг утгах
DataTable объектоос бичлэг устгахдаа DataRow
объектын Deleted() методыг ашиглана. Хэрвээ
тухай...
ШААРДЛАГА ОБЪЕКТУУД
Хэрвээ DataSet-д буруу мэдээлэл оруулсан
тохиолдолд түүнийг өгөгдлийн эх үүсвэрлүү
илгээхээс өмнө барь...
ШААРДЛАГА ОБЪЕКТУУД
ADO.NET-д хоѐр төрлийн шаардлага объект
байдаг
 uniqueConstraint шаардлага нь нэг талбарт утга
давтаг...
ШААРДЛАГА ОБЪЕКТУУД
UniqueConstraint объектыг үүсгэх
Талбарын утга давтагдахаас сэргийлж үүсгэх
UniqueConstraint uc = new ...
ШААРДЛАГА ОБЪЕКТУУД
UniqueConstraint объектыг үүсгэх


Анхдагч түлхүүр үүсгэх
UniqueConstraint uc = new UniqueConstraint(...
ШААРДЛАГА ОБЪЕКТУУД
ForeignKeyConstraint объектыг үүсгэх
ForeignKeyConstraint үүсгэхдээ холболтын эх ба хүүхэд
талбаруудыг...
ШААРДЛАГА ОБЪЕКТУУД
ForeignKeyConstraint объектыг үүсгэх





ForeignkeyConstraint нь холбогдсон хүснэгтүүдийн
хувьд өөр...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Өгөгдлийн эх үүсвэрээс завсарын эх үүсвэрт өгөгдлийг ачаалах

String connString = “Data Sou...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээх






DataAdapter объектын Update() метод нь D...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх


CommandBuilder объект н...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх

CommandBuilder
 The Sele...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх

CommandBuider
String conn...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх

CommandBiulder
 DataTabl...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









Co...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

CommandBuilder н...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









Par...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

CREATE PROCEDURE...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

CREATE PROCEDURE...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх








...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

SqlParameterColl...
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

Ccparams=updateC...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

DataSet ds= new DataSet();
 da.Fill(ds. “Employees”);
 //... DataSet
 da.InsertCommand.Parame...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

DataSet ds= new DataSet ();
 da.Fill(ds. “Employees”);
 //... DataSet
 DataRow row= ds.Table[...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ
DataSet ds = new DataSet(“SalesOrders”);
DartaTable dtHeader = new
DataTable(“SalesOrderHeader”);...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ













dtHeader.PrimaryKey=new
DataColumn[]{cols[“SalesOrderID”]};
ds.Table.Add(d...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

Cols.add(“OrderQty”,
typeof(System.Int16)).AllowDBNull = false;
 Cols.Add(“LineTotal”, typeof(S...
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ











String sqlConnectString= “Data Source=(local);
Integrated security=true; Initial...
Upcoming SlideShare
Loading in …5
×

Lecture5 6

408 views
326 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
408
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • е
  • Lecture5 6

    1. 1. ВИЗУАЛЬ ПРОГРАМЧЛАЛ II Тогтохын Гантөр
    2. 2. ADO.NET ADO.NET ХОЛБООГҮЙ ЗАГВАР Лекц №5, 6
    3. 3. ХИЧЭЭЛИЙН АГУУЛГА: холбоогүй загварын онцлог  DataSet, түүний бүрэлдэхүүн объектууд  DataAdapter объект  Объектуудын харилцан ажиллагаа  ADO.NET
    4. 4. ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ Холбоогүй загвар (Disconnected Model) гэдэг нь өгөгдлийг өгөдлийн эх үүсвэрээс клиент машинд ачаалах буюу уншаад, хүлээн авсан өгөгдлийн локаль машин дээр боловсруулаад, өгөгдөл дээр хийсэн өөрчлөлтөө өгөгдлийн эх үүсвэрлүү буцаан илгээх буюу бичнэ.  Холбоогүй загвар нь өгөгдлийг зөвхөн өгөгдлийн эх үүсвэрээс унших, бичих үед холболт хийгдэж, бусад үед салангид ажиллана.  Багш: Тогтохын Гантөр
    5. 5. ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ  Холбоогүй загварыг ашиглаж, өгөгдлийн клиент машин дээр байрлуулснаар сервэрийн санах ой, холболт, боловсруулалт зэрэг нөөцүүдийг хэмнэж, өгөгдөл боловсруулах үүргээс чөлөөлөх давуу талтай  Өгөгдлийг унших болон бичих үед хугацаа, санах ой их зарцуулах муу талтай Багш: Тогтохын Гантөр
    6. 6. ADO.NET ХОЛБООГҮЙ ЗАГВАР Бүрэлдэхүүн объектууд DataSet– хоорондоо хамаарал бүхий DataTable хүснэгтүүдийг агуулсан, санах ой дахь холбоост өгөгдлийн сан  DataTable– өгөгдлийн эх үүсвэр хүснэгтүүдийг хуулбарласан мөр (DataRow), багана (DataColumn), бүтэцтэй хүснэгт. Талбарт тавигдах шаардлага (Constraint), хүснэгт хоорондын хамаарал (DataRelation), харах хүснэгт (DataView) ийг мөн тодорхойлно.  Багш: Тогтохын Гантөр
    7. 7. ADO.NET ХОЛБООГҮЙ ЗАГВАР Бүрэлдэхүүн объектууд DataAdapter - өгөгдлийг DataSet –рүү ачаалах, өгөгдөл дээр хийсэн өөрчлөлтийг буцааж өгөглийн эх үүсвэрлүү илгээх байдлаар ажиллана. DataTable DataTable DataTable DataAdapter InsertCommnad UpdateCommand DeleteCommand SelectCommand Өөрчлөлт илгээх DataSet Өгөгдөл ачаалх SqlDataAdapter, OracleDataAdapter,OdbcAdapter, OleDbDataAdapter Өгөгдөл ачаалх  Database Тогтохын Гантөр
    8. 8. DataAdapter объект DataAdapter объект нь өгөгдлийн эх үүсвэр болон завсарын эх үүсвэр (DataSet, DataTable ) хоѐрын хооронд гүүр байдлаар ажилладаг .  DataAdapter объектын Fill() методыг ашиглан өгөгдлийн эх үүсвэрээс DataSet болон DataTable объектуудруу өгөгдлүүдийг ачаалдаг.  DataAdapter объектын Update() методыг ашиглан DataSet болон DataTable объектууд дахь өгөгдлүүдэд хийсэн өөрчлөлтийг өгөгдлийн эх үүсвэрлүү буцаадаг.  DataAdapter объект нь DataSet объектод өөрчлөлт хийхдээ CommandBuilder объектыг ашиглаж болно.  Багш: Тогтохын Гантөр
    9. 9. DataAdapter объект Анхны DataSet өөрчлөх Өөрчлөлсөн DataSet Fill() DataAdapter Өгөгдлийн эх үүсвэр Update() Багш: Тогтохын Гантөр
    10. 10. DataAdapter объект DataAdapter объектыг үүсгэх  SQL илэрхийлэл тодорхойлон үүсгэх String connString = “Data Source = (local);Integrated security= true; Initial Catalog= Northwind; ”; String selectSql= “SELECT* FROM Orders”; SqlDataAdapter da = new SqlDataAdapter(selectSql, connString); Багш: Тогтохын Гантөр
    11. 11. DataAdapter объект DataAdapter объектыг үүсгэх  Command объект тодорхойлон үүсгэх String connString= “Data Source=(local); Integrated security= true; Initial Catalog=Northwind;”; SqlCommand conn = new SqlConnection(connString); String selectSql= “MyStoredProcedure”; SqlCommand selectCmd= new SqlCommand (selectSql, conn); selectCmd.CommandType=CommandType.StoredProcedure; SqlDataAdapter da = new SqlDataAdapter(selectCmd); Багш: Тогтохын Гантөр
    12. 12. DataSet объект  DataSet объект нь өгөгдлүүдийг агуулах, хоорондоо холбогдсон хүснэгтүүдийн санах ой дахь дүрслэл буюу санах ой дахь өгөгдлийн сан юм.  DataSet нь ямар нэг өгөгдөл нийлүүлэгчээс хамааралгүй байдаг.  DataSet нь өгөгдлийн эх үүсвэрээс ямагт салангид ажиллана. Өгөгдлийн эх үүсвэрлүү хандаж ажиллахдаа DataAdapter объектыг ашиглана. Connection объекттой хэзээ ч шууд харилцдаггүй. Багш: Тогтохын Гантөр
    13. 13. DataAdapter объект DataSet объектыг үүсгэх DataSet DataTableCollection DataRow DataColumn DataTabel DataRelationCollection DataRelation DataRowCollection DataCollemn Collection Constraint ConstraintCollection DataView DefaultView Багш: Тогтохын Гантөр
    14. 14. DataSet объект DataSet объект нь дараах хоѐр төрлийнх байна.   Хэлбэржүүлсэн DataSet (Typed Dataset)DataSet классаас удамшин, автоматаар үүсдэг ба тухайн классаар үүсгэгдсэн XML схем файл (.xsd) дахь мэдээллийг ашигладаг. Visual Studio хөгжүүлэх орчинг ашиглан үүсгэдэг. Хэрбэржүүлээгүй DataSet (Untyped DataSet)DataSet классаас удамшуулан гараар үүсгэдэг. Багш: Тогтохын Гантөр
    15. 15. DataSet объект DataSet объектыг үүсгэх  DataSet классын байгуулагч функцийн тусламжтайгаар үүсгэнэ. DataSet ds = new DataSet(“MyDataSet”); DataSet ds = new DataSet(); Багш: Тогтохын Гантөр
    16. 16. DataTable объект DataSet объект нь DataTableCollection объект дахь DataTable объектуудыг агуулах ба тэдгээр нь DataSet объектын Tables шинжид нь холбогдоно.  DataSet объектод нэг хүснэгт нэмэх бол DataTableCollection объектын Add() методыг ашиглана.  Харин олон хүснэгт нэмэх бол AddRange() методыг ашиглана.  Багш: Тогтохын Гантөр
    17. 17. DataTable объект Хүснэгт үүсгэн, DataSet объетод нэмэх DataSet ds = new DataSet(“MyDataSet”);  DataTable dt= new DataTable(“MyTable”); ds. Table.Add(dt);  ds.Table.Add(“MyTable1”);  DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); ds.Tables.AddRange(new DataTable[] {dt1, dt2}); Багш: Тогтохын Гантөр
    18. 18. DataTable объект Хүснэгттэй ажиллах DataSet объект дахь хүснэгтүүдэд дараах аргуудаар хандаж ажиллана.  Нэрээр DataTable dt= ds.Tables[“MyTable”];  Индексээр DataTable dt= ds.Tables[0]; Багш: Тогтохын Гантөр
    19. 19. DataTable объект Хүснэгттэй ажиллах  DataSet объект дахь хүснэгтийн тоог буцаах   DataSet объектод өгөгдсөн нэртэй хүснэгт байгаа эсэхийг тодорхойлох   Int32 tableCount = ds.Table.Count; Boolean tableExists = ds.Tables.Contains(“MyTable”); DataSet объект дахь хүснэгтийн индексийг буцаах Int32 tablelndex = ds.Tables.IndexOf(“MyTable”);  DataTable dt= ds.Tables.Add(“MyTable”) Int32 tablelndex = ds.Tables.IndexOf(dt);  Тогтохын Гантөр
    20. 20. DataTable объект Хүснэгттэй ажиллах  DataSet объектоос хүснэгтүүдийг устгах  DataTable dt= ds.Tables.Add(“MyTable”); ds.Remove(dt);  ds.Remove(“MyTable”);  ds.RemoveAt[0];  ds.Tables.Clear(); Тогтохын Гантөр
    21. 21. DataColumn объект DataTable объект нь DataColumnCollection объект дахь DataColumn объектуудыг агуулах ба тэдгээр нь DataTable объектын Columns шинжид нь холбогдоно.  DataTable объектод нэг багана нэмэх бол DataColumnCollection объектын Add() методыг ашиглана.  Харин олон багана нэмэх бол AddRange() методыг ашиглана.  Тогтохын Гантөр
    22. 22. DataColumn объект Багана үүсгэн, хүснэгтэд нэмэх DataTable dt= new DataTable(“MyTable”);  DataColumn col= new DataColumn (“MyColumn”, typeof (System.Int32)); dt.Columns.Add( col);  dt.Columns.Add(“MyColumn”,typeof((System.Int32));  DataColumn[] dca = new DataColumn[] {new DataColumn(“Col1”, typeof(System.Int32)), new DataColumn(“Col2”, typeof(System.Int32))}; dt.Columns.AddRange(dca); Тогтохын Гантөр
    23. 23. DataColumn объект Багана үүсгэн, хүснэгтэд нэмэх DataTable dt = new DataTable(“MyTable”);  DataColumn col2 = new DataColumn(); col2.ColumnName = “Column-2”; col2.DataType = typeof(string); col2.MaxLength = 50; dt.Columns.Add(col2); Тогтохын Гантөр
    24. 24. DataColumn объект Багана үүсгэн, хүснэгтэд нэмэх DataTable dt = new DataTable(“MyTable”);  DataColumn col = new DataColumn (“Id”, typeof(System.Int32)); col.AllowDBNull = false; //хоосон утга авахгүй col.DefaultValue = -1; //анхны утгатай col.Caption = “ID #”; //баганын гарчиг col.ReadOnly= true; //утга давтагдахгүй dt.Columns.Add(col); //утга давтагдахгүй Тогтохын Гантөр
    25. 25. DataColumn объект Автоматаар нэмэгдэх утгатай баган үүслэх DataTable dt = new DataTable(“MyTable”);  DataColumn col = new DataColumn (“Id”, typeof(System.Int32)); col.Autolncrement = true; // автоматаар нэмэгдэх col.AutolncrementSeed = 1; // эхлэх утга col.AutolncrementStep = 2; // нэмэгдэх утга dt.Columns.Add(col); Тогтохын Гантөр
    26. 26. DataColumn объект Тооцоологдох утгатай багана нэмэх DataTable dt = new DataTable(“MyTable”);  DataColumn[] dc = new DataColumn[] {new DataColumn(“Quantity”,typeof(System.Int32)), new DataColumn(“Price”, typeof(System.Decimal))}; dt.Columns.AddRange(dc); DataColumn col3 = new DataColumn(“ExtendedPrice”, typeof(System.Decimal)); Col3. Expression = “Quantity * Price”; dt.Columns.Add(col3); Тогтохын Гантөр
    27. 27. DataRow объект DataRow объект нь DataTable объектын нэг мөрийг илэрхийлнэ.  DataTable объектын нэг мөр бичлэгийг утсгах, өөрчлөх, нэмэх, дуудахад DataRow объект ашиглагдана. Ө.х холбогдоогүй загварын хувьд өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээхэд ашиглагдана.  DataRow объектыг ашиглан тухан бичлэгийн талбар тус бүрийн утгаруу хандаж болно.  Тогтохын Гантөр
    28. 28. DataRow объект Мөр үүсгэн, хүснэгтэд нэмэх DataTable dt= new DataTable(); dt.Columns.Add(“MyColumn”,typeof(System.String));  DataRow row = dt.NewRow(); row[“MyColumn”] = “Item 1”;  dt.Rows.Add(row); Тогтохын Гантөр
    29. 29. DataRow объект Бичлэг засварлах 1 -р арга: Тухайн бичлэгийн багананд хандах замаар DataRow row; // талбарт индексаар хандах row[0] = “New Value”; // талбарт нэрээр хандах row[“MyColumn”]= “New Value ”; Тогтохын Гантөр
    30. 30. DataRow объект Бичлэг засварлах 2-р арга: дараах методуудын тусламжтайгаар    BeginEdit() - засварлах горимыг эхлүүлнэ CancelEdit() -буферлэгдсэн өөрчлөлтийг цуцлана. EndEdit() -хийсэн өөрчлөлтийг баталгаажуулна. Тогтохын Гантөр
    31. 31. DataRow объект Бичлэг засварлах DataTable dt = new DataTable(); // DataTable объектод өгөгдөл ачаалах код DataRow row = dt.Rows[o]; row.BeginEdit(); foreach(DataColumn col in dt.Columns){ // тухайн талбарын утгыг өөрчлөх } bool rowValid = true; if(rowValid) row.CancelEdit(); else row.EndEdit (); Тогтохын Гантөр
    32. 32. DataRow объект Бичлэгт хийсэн өөрчлөлтийг зөвшөөрөх ба цуцлах DataRow- д өөрчлөлт хийсэн үед ADO.NET нь өөрчлөлтийг хүлээх горимд оруулах ба RowState шинжид харгалзах төлвийг (Added, Modified, Deleted) тодорхойлдог.  Хүлээх төлөвт оршиж байгаа өөрчлөлтийг зөвшөөрөх эсвэл цуцлахдаа AccepChanges(), RejectChanges() харгалзан ашиглана.  Дээрх методууд нь хамгийн сүүлд дуудагдсан AcceptChanges() хүртэлх үйлдлүүд үйлчилнэ.  Мөн AccentChanges() метод нь EndEdint() методын, RejectChanges() метод нь CancelEdit() методын цаана шууд бусаар дуудагддаг.  Тогтохын Гантөр
    33. 33. DataRow объект Бичлэгийн төлвийн мэдээллийг ашиглах DataRow-д хийгдсэн өөрчлөлтийн мэдээллийг авахдаа DataRow объектын RowState шинжийг ашиглана.  RowState шинжийн утгыг хэрэглэгч тодорхойлох боломжгүй. Харин ADO.NET нь DataRow объектод хийгдсэн үйлдлүүдийг хариуг RowState шинжид тодорхойлдог.  RowState шинжийг утгыг цэвэрлэхдээ AccentChanges(), RejectChanges() методуудыг ашиглана. Unchanged утгатай болно.  Тогтохын Гантөр
    34. 34. DataRow объект Бичлэгийн төлвийн мэдээллийг ашиглах DataTable dt = new DataTable(); dt.Columns.Add(“MyColumn”, typeof(System.String )); DataRow row = dt.NewRow(); // RowState = Detached dt.Rows.Add(row); // RowState = Added dt.AcceptChanges(); //RowState = Unchanged row[“MyColumns”] = “MyFieldValue”; // RowState = Modified row.RejectChanges(); // RowState = Unchanged row.Deleted (); // RowState = Deleted row.AcceoptChanges (); Тогтохын Гантөр
    35. 35. DataRow объект Бичлэг утгах DataTable объектоос бичлэг устгахдаа DataRow объектын Deleted() методыг ашиглана. Хэрвээ тухайн бичлэгийн RowState шинж нь Added утгатай байвал устгагдах боломжтой  Тухайн бичлэгийн хувьд AcceptChanges() методыг дуудах үед харгалзах хүснэгтээс тухайн бичлэг устгагдана.  DataAdapter объектын Update() методыг дуудах үед өгөгдлийн эх үүсвэрээс бичлэг устгагдана.  Тогтохын Гантөр
    36. 36. ШААРДЛАГА ОБЪЕКТУУД Хэрвээ DataSet-д буруу мэдээлэл оруулсан тохиолдолд түүнийг өгөгдлийн эх үүсвэрлүү илгээхээс өмнө барьж чаддаггүй. Энэ тохиолдолд алдааг олох, шийдвэрлэхэд нилээд төвөгтэй байдаг.  Ийм буруу өгөгдлөөс зайлсхийх арга нь DataColumn объектын шинж чанаруудыг ашиглах юм.  Бас нэг арга нь шаардлага объектуудыг ашиглах юм.  Тогтохын Гантөр
    37. 37. ШААРДЛАГА ОБЪЕКТУУД ADO.NET-д хоѐр төрлийн шаардлага объект байдаг  uniqueConstraint шаардлага нь нэг талбарт утга давтагдаж орохыг үл зөвшөөрөх дүрмийг илэрхийлнэ (давтагдашгүй түлхүүр)  ForeignKeyConstraint шаардлага нь нэг хүснэгтийг нөгөө хүснэгттэй холбох холбоосыг илэрхийлнэ. (гадаад түлхүүр)  DataTable объект нь ConstraintCollection объект дахь дээрх объектуудыг агуулах бах тэдгээр нь DataTable объектын Constraints шинжид нь холбогдоно.  Тогтохын Гантөр
    38. 38. ШААРДЛАГА ОБЪЕКТУУД UniqueConstraint объектыг үүсгэх Талбарын утга давтагдахаас сэргийлж үүсгэх UniqueConstraint uc = new UniquiConstraint (“ID”, dt.Columns[“CustomerID”]); dt.Constraints.Add(uc);  Хэд хэдэн талбарыг хамааруулан үүсгэх DataColumn[] cols= new DataColumn[] {dt.Columns[“LastName”], dt.Columns[“FirstName”]}; UniqueConstraint uc = new UniqueConstraint(“FullName”,cols); dt.Constraints.Add(us);  Тогтохын Гантөр Тогтохын Гантөр
    39. 39. ШААРДЛАГА ОБЪЕКТУУД UniqueConstraint объектыг үүсгэх  Анхдагч түлхүүр үүсгэх UniqueConstraint uc = new UniqueConstraint(“ID”, dt.Columns[“CustomerID”], true); dt.Constraints.Add(uc);  DataTable объектын ConstraintCollection олонлогт нэмэх байдлаар үүсгэх dt.Constraints.Add(“ID”, dt.Columns[“CustomerID”], false); Тогтохын Гантөр
    40. 40. ШААРДЛАГА ОБЪЕКТУУД ForeignKeyConstraint объектыг үүсгэх ForeignKeyConstraint үүсгэхдээ холболтын эх ба хүүхэд талбаруудыг тодорхойлох ѐстой.   ForeignKeyConstraint fc = new ForeignKeyConstraint(“CategoryID”, ds.Tables[“Categories”].Columns[“CategoryID”], ds.Tables[“Products”].Columns[“CategoryID”]); ds.Table[“Products”].Constraints.Add(fc); dt.Constraints.Add(“CategoryID”, ds.Tables[“Categories”].Columns[“CategoryID”], ds.Tables[“Products”].Columns[“CategoryID”]);
    41. 41. ШААРДЛАГА ОБЪЕКТУУД ForeignKeyConstraint объектыг үүсгэх   ForeignkeyConstraint нь холбогдсон хүснэгтүүдийн хувьд өөрчлөлтийг хязгаарлахын тулд дараах шинжүүдийг ашиглана. DelereRule эх бичлэгийг устгахад охин бичлэг яах вэ гэдгийг тодорхойлно. Анхны утга нь Cascade байх ба энэ нь эх бичлэгийг дагаж охин бичлэгүүд устгагдана. UpadateRule эх бичлэгийн түлхүүр талбарын утга өөрчлөгдөхөд яах вэ гэдгийг тодорхойлно. Анхны утга нь Cascade
    42. 42. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Өгөгдлийн эх үүсвэрээс завсарын эх үүсвэрт өгөгдлийг ачаалах String connString = “Data Source=(local); Integrated security=true; Initial Catalog=Northwind;”; String selectSQL = “SELECT*FROM Orders ”; SqlDataAdapter da = new SqlDataAdapter(selectSQL, connString);  DataSet объектод ачаалах DataSet ds = new DataSet(); da.Fill(ds.”Orders”);  DataTable объетод ачаалах DataTable dt=new DataTable(“Orders”); da.Fill(dt);
    43. 43. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээх    DataAdapter объектын Update() метод нь DataSet дэхь өөрчлөгдсөн, оруулсан, устгасан бичлэгүүдийг өгөгдлийн эх үүсвэрлүү илгээхдээ DeleteeCommand, InsertCommand, UpdateCommand объектууд дахь командуудыг ашиглана. CommandBuilder Объектыг ашигласнаар оруулах, засварлах, устгах командуудыг автоматаар үүсгэж болно. Гэхдээ хамгийн оновчтой арга биш Эсвэл DeleteCommand, InsertCommand, UpdateCommand объектуудад тус бүрт нь хэрэглэгчийн алгоритмыг тодорхойлж ашиглаж болно. Гүйцэтгэлийг харьцангуй нэмэгдүүлдэг.
    44. 44. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх  CommandBuilder объект нь DeleteCommand, InsertCommand, UpdateCommand команд объектуудыг байгуулахад шаардагдах мета өгөгдлийг буцаахдаа DataAdapter объектын SelectCommand объектыг ашигладаг.  SelectCommand нь ядаж нэг анхдагч түлхүүр талбар юмуу давтагдахгүй түлхүүр талбарын агуулсан байх ѐстой ба ингэснээр DeleteCommand, UpdateCommand командуудаар боловсруулагдах бичлэгийг олох боломжтой болно.
    45. 45. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх CommandBuilder  The SelectCommand must also contain all the required columns without default values in the DataRow for the generated Insert Command to work.  SelectCommand нь зөвхөн нэг хүснэгтээс өгөгдлийг буцаадаг байх ѐстой.  Харваа SelectCommand өөрчлөгдсөн тохиолдолд өөрчлөх командуудыг шинээр үүсгэхийн тулд RefreshSchema() методыг дуудах ѐстой.  GetDeleteCommand(), GetInsertCommand(), GetUpdateCommand() методуудыг ашиглан өөрчлөх командуудыг буцааж болно. 
    46. 46. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх CommandBuider String connString=“Data Source=(local); Integrated security=true; Initial Catalog=Northwind;”; SqlDataAdapter da = new SqlDataAdapter(“SELECT * FROM Employee ORDER by EmployeeID”, connString ); SqlCommandBuilder builder=new SqlCommandBuilder(adapter); DataSet ds=newDataSet(“EmployeeSet ”); da.Fill(ds, “Employees”);
    47. 47. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх CommandBiulder  DataTable EmployeeTable = ds.Table[“Employees”];  DataRow row= EmployeeTable.NewRow();  row[“FirstName”]=“Rodney”;  row[“LastName”]= “DangerField”;  Row[“Title”]=“Comedian”;  EmployeeTable.Rows.Add(row);  da.Update(ds, “Employee”);  MessageBox.Show(row[“FirstName”].ToString().Trin g()+ “ “ +row[“LastName”].ToString().Trim()); 
    48. 48. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх       CommandBuilder нь хэрэгцээт команд объектуудыг үүсгэхэд хялбар байдаг хэдий ч бас дутагдалтай. Хэрэглэгчийн алгоритмыг ашиглах нь дараах давуу талуудтай Хадгалагдсан процедур ашиглах Хэд хэдэн хүснэгтүүдийг холбож, боловсруулалт хийх Илүү уян хатан боловсруулалт (CommandBuilder объектоор үүсгэгдсэн DELETE, UPDATE ком андууд нь яг оргинал бичлэгийн бүх талбарт тохирох бичлэгийг өгөгдлийн эх үүсвэрээс хайдаг. Хэрвээ анхны утгууд нь өөрчлөгдсөн байвал тухайн үйлдэл амжилтгүй болдог. )
    49. 49. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх CommandBuilder нь өөрчлөлт хийх DeleteCommand, InsertCommand, UpdateCommand объектуудыг автоматаар үүсгэн, DataSet д хийгдсэн өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх асуудлыг DataAdapter ашиглан зохицуулдаг  Харин хэрэглэгчийн алгоритм ашиглах үед тэдгээр өөрчлөлт хийх объет бүрийг тодорхойлсон байх шаардлагатай 
    50. 50. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх      Parameter объектын SourceColumn, SourceVersion шинжүүд нь DataColumn объекттой холбогддог ба DataAdapter эдгээр шинжүүдийг ашиглан DataRow дэхь эх утгуудыг тодорхойлдог. Ө.Х эх утга буюу тухайн мөрөнд өөрчлөлт хийхээс өмнө байсан утгууд нь уг DataRow-д зохиулсан өөрчлөх командын парамтр ачаалагддаг. params.Add(“@OrderID”, SqlDbType.Int, 0, “OrderID”); params[“@OrderID”].SourceVersion = DataRowVersion.Original; params[“@OrderID”].SourceVersion = DataRowVersion.Current;
    51. 51. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх CREATE PROCEDURE DeleteEmployees  @EmpID int  AS  SET NOCOUNT ON  DELETE FROM Employees WHERE  • EMPID = @EMPID • • RETURN GO
    52. 52. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх CREATE PROCEDURE GetEmployees  AS  SET NOCOUNT ON  SELECT EmpID, FirsName, LastName  FROM Employees  return  GO 
    53. 53. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх              CREATE PROCEDURE InsertEmployees @EmpID int output, @FirstName nvarchar(30), @LastName nvarchar(30) AS SET NOCOUNT ON INSERT Employees (FirstName, LastName ) VALUES(@FirstName, @LastName) if @ @rowcount=0 return 1 SET @EmpID = Scope_Identity() SELECT @Empld Empld Return GO
    54. 54. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх             CREATE PROCEDURE UpdateEmployees @EmpID int output, @FirstName nvarchar (30), @LastName nvarchar (30) AS SET NOCOUNT ON UPDATE Employees SET FirstName= @FirstName, LastName= @LastName WHERE EmpID=@EmpID if @ @rowcount=0 return 1 return GO
    55. 55. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх            String connString = “Data Source=(local); Integrated security=SSPI; Initial Catalog= Northwind; ”; SqlConnection conn= new SqlConnection(connString ); SqlCommand selectCommand = new SqlCommand(“GetEmployees”, conn); SelectCommand.CommandType=CommnadType.StoredProcedure; SqlCommand deleteCommand=new SqlCommand(“DeleteEmployees”, conn); deleteCommand.CommandType=CommandType.StoredProcedure; SqlCommand insertCommand= new SqlCommand(“InsertEmployees”, conn); insertCommand.CommandType=CommandType.StoredProcedure; SqlCommand updateCommand=new SqlCommand(“UpdateEmployees”, conn); updateCommand.CommandType=CommandType.StoredProcedure;
    56. 56. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх SqlParameterCollection cparams; Cparams=deleteCommand.Parameters; Cparams.Add(“@EmpID”, SqlDbType.Int, 0, “EmpID”); Cparams[“@EmpID”].SourceVersion=DataRowVersion.Ori ginal; Cparams=insertCommand.Parameters; Cparams.Add(“@EmpID”, SqlDbType.Int, 0, “EmpID”); Cparams[“@EmpID”].Direction=ParameterDirection.Outpu t; Cparams[“@EmpID”].SourceVersion=DataRowVersion.Ori ginal; Cparams.Add(“@FirstName”, SqlDbType.NVarChar, 30, “LastName”);
    57. 57. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх Ccparams=updateCommand.Parameters;  Cparams.Add(“@EmpID”, SqlDbType.Int, 0, “EmpID”);  • • • • • • • Cparams[“@EmpID”].SourceVersion=DataRowVersion.Ori ginal; Cparams.Add(“@FirstName”, SqlDbType.NVarChar, 30, “FirstName”); Cparams.Add(“@FirstName”, SqlDbType.NVarChar, 30, “FirstName”); SqlDataAdapter da= new SqlDataAdapter(selectCommand.CommandText,conn); da.DeleteCommand=deleteCommand; da.InsertCommand=insertCommand; da.UpdateCommand=updateCommand;
    58. 58. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ DataSet ds= new DataSet();  da.Fill(ds. “Employees”);  //... DataSet  da.InsertCommand.Parameters[1].Value= “” ;  da.InsertCommand.Parameters[2].Value=“”;  da.InsertCommand.Connection.Open();  da.InsertCommand.ExecuteNonQuery();  MessageBox.Show(da.InsertCommand.Parameters [0].Value.ToString());  da.Update(ds.”Employees”); 
    59. 59. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ DataSet ds= new DataSet ();  da.Fill(ds. “Employees”);  //... DataSet  DataRow row= ds.Table[0].NewRow();  Row[1] = “www”;  Row[2] = “www”;  ds.Tables[0],Rows.Add(row);  da.Update(ds. “Employees”); 
    60. 60. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ DataSet ds = new DataSet(“SalesOrders”); DartaTable dtHeader = new DataTable(“SalesOrderHeader”); DataColumnCollection cols= dtHeader.Columns; DataColumn col = cols.Add(“SalesOrderID”, typeof(System.Int32)); col.AutoIncrement= true; Col.AutolncrementSeet=-1; Col.AutolncrementStep=-1; Cols.Add(“OrderDate”, typeof(System.DateTime)).AllowDBNull = false; Cols.Add(“SalesOrderNumber”, typeof(System.String)).MaxLength=25; Cols.Add(“TotalDue”, typeof(System.Decimal));
    61. 61. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ           dtHeader.PrimaryKey=new DataColumn[]{cols[“SalesOrderID”]}; ds.Table.Add(dtHeader); DataTable dtDetail = new DataTable(“SalesOrderDetail”); Cols=dtDetail.Columns; Cols.Add(“SalectOrderID”, typeof(System.Int32)).AllowDBNull = false; Col=cols.Add(“SalesOrderDetailID”, typeof(System.Int32)); Col.AutoIncrement = true; Col.AutoncrementSeet = -1; Col.AutoncrementStep = -1; Cols.Add(“UnitPrice”, typeof(System.Decimal)).AllowDBNull = false;
    62. 62. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ Cols.add(“OrderQty”, typeof(System.Int16)).AllowDBNull = false;  Cols.Add(“LineTotal”, typeof(System.Decimal));  dtDetail.PrimaryKey = new DataColumn[]  {cols[“OrderID”], cols[“ProductID”]};  ds.Tables.Add(dtDetail);  ds.Relations.Add(“SalecOrderHeader_SalesOrderD etail”, dtHeader.Columns[“SalesOrderID”], dtDetail.Columns[“SalesOrderID”]); 
    63. 63. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ       String sqlConnectString= “Data Source=(local); Integrated security=true; Initial Catalog=AdventureWorks;”; String sqlSelect = @ “SELECT ” SalesOrderID, OrderDate, SalesOrderNumber, TotalDue FROM Sales.SalesOrderHeader SELECT SalesOrderID, SalesOrderDetailID, UnitPrice, OrderQty, LineTotal FROM Sale.SalesOrderDetail;”; SqlDataAdapter da = new SqlDataAdapter(sqlSelect, sqlConnectString); da.TableMapping.Add (“Table”, “SalesOrderHeader ”); da.TableMapping.Add (“Table1”, “SalesOrderHeader ”); da.Fill(ds);

    ×