More Related Content
Similar to Lecture5 6 (20)
More from Gantur Togtokh (20)
Lecture5 6
- 4. ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ
Холбоогүй загвар (Disconnected Model) гэдэг нь
өгөгдлийг өгөдлийн эх үүсвэрээс клиент машинд
ачаалах буюу уншаад, хүлээн авсан өгөгдлийн
локаль машин дээр боловсруулаад, өгөгдөл
дээр хийсэн өөрчлөлтөө өгөгдлийн эх үүсвэрлүү
буцаан илгээх буюу бичнэ.
Холбоогүй
загвар нь өгөгдлийг зөвхөн
өгөгдлийн эх үүсвэрээс унших, бичих үед
холболт хийгдэж, бусад үед салангид ажиллана.
Багш: Тогтохын Гантөр
- 5. ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ
Холбоогүй загварыг ашиглаж, өгөгдлийн клиент
машин дээр байрлуулснаар сервэрийн санах ой,
холболт, боловсруулалт зэрэг нөөцүүдийг
хэмнэж, өгөгдөл боловсруулах үүргээс чөлөөлөх
давуу талтай
Өгөгдлийг унших болон бичих үед хугацаа, санах
ой их зарцуулах муу талтай
Багш: Тогтохын Гантөр
- 6. ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд
DataSet– хоорондоо хамаарал бүхий DataTable
хүснэгтүүдийг агуулсан, санах ой дахь холбоост
өгөгдлийн сан
DataTable– өгөгдлийн эх үүсвэр хүснэгтүүдийг
хуулбарласан
мөр
(DataRow),
багана
(DataColumn),
бүтэцтэй
хүснэгт.
Талбарт
тавигдах шаардлага
(Constraint), хүснэгт
хоорондын хамаарал
(DataRelation), харах
хүснэгт (DataView) ийг мөн тодорхойлно.
Багш: Тогтохын Гантөр
- 7. ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд
DataAdapter - өгөгдлийг DataSet –рүү ачаалах,
өгөгдөл дээр хийсэн өөрчлөлтийг буцааж өгөглийн эх
үүсвэрлүү илгээх байдлаар ажиллана.
DataTable
DataTable
DataTable
DataAdapter
InsertCommnad
UpdateCommand
DeleteCommand
SelectCommand
Өөрчлөлт
илгээх
DataSet
Өгөгдөл
ачаалх
SqlDataAdapter, OracleDataAdapter,OdbcAdapter, OleDbDataAdapter
Өгөгдөл
ачаалх
Database
Тогтохын Гантөр
- 8. DataAdapter объект
DataAdapter объект нь өгөгдлийн эх үүсвэр
болон завсарын эх үүсвэр (DataSet, DataTable )
хоѐрын хооронд гүүр байдлаар ажилладаг .
DataAdapter объектын
Fill() методыг ашиглан
өгөгдлийн эх үүсвэрээс
DataSet
болон
DataTable объектуудруу өгөгдлүүдийг ачаалдаг.
DataAdapter
объектын Update() методыг
ашиглан DataSet болон DataTable объектууд
дахь өгөгдлүүдэд хийсэн өөрчлөлтийг өгөгдлийн
эх үүсвэрлүү буцаадаг.
DataAdapter объект нь
DataSet объектод
өөрчлөлт хийхдээ CommandBuilder объектыг
ашиглаж болно.
Багш: Тогтохын Гантөр
- 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. 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. DataSet объект
DataSet объект нь өгөгдлүүдийг агуулах,
хоорондоо холбогдсон хүснэгтүүдийн санах ой
дахь дүрслэл буюу санах ой дахь өгөгдлийн сан
юм.
DataSet нь ямар нэг өгөгдөл нийлүүлэгчээс
хамааралгүй байдаг.
DataSet нь өгөгдлийн эх үүсвэрээс ямагт салангид
ажиллана. Өгөгдлийн эх үүсвэрлүү хандаж
ажиллахдаа DataAdapter объектыг ашиглана.
Connection объекттой хэзээ ч шууд харилцдаггүй.
Багш: Тогтохын Гантөр
- 13. DataAdapter объект
DataSet объектыг үүсгэх
DataSet
DataTableCollection
DataRow
DataColumn
DataTabel
DataRelationCollection
DataRelation
DataRowCollection
DataCollemn Collection
Constraint
ConstraintCollection
DataView
DefaultView
Багш: Тогтохын Гантөр
- 14. DataSet объект
DataSet объект нь дараах хоѐр төрлийнх байна.
Хэлбэржүүлсэн DataSet (Typed Dataset)DataSet классаас удамшин, автоматаар үүсдэг
ба тухайн классаар үүсгэгдсэн XML схем файл
(.xsd) дахь мэдээллийг ашигладаг. Visual Studio
хөгжүүлэх орчинг ашиглан үүсгэдэг.
Хэрбэржүүлээгүй DataSet (Untyped DataSet)DataSet классаас удамшуулан гараар үүсгэдэг.
Багш: Тогтохын Гантөр
- 15. DataSet объект
DataSet объектыг үүсгэх
DataSet классын байгуулагч функцийн
тусламжтайгаар үүсгэнэ.
DataSet ds = new DataSet(“MyDataSet”);
DataSet ds = new DataSet();
Багш: Тогтохын Гантөр
- 16. DataTable объект
DataSet объект нь DataTableCollection объект
дахь DataTable объектуудыг агуулах ба тэдгээр
нь DataSet объектын Tables шинжид нь
холбогдоно.
DataSet объектод нэг хүснэгт нэмэх бол
DataTableCollection объектын Add() методыг
ашиглана.
Харин олон хүснэгт нэмэх бол AddRange()
методыг ашиглана.
Багш: Тогтохын Гантөр
- 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});
Багш: Тогтохын Гантөр
- 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);
Тогтохын Гантөр
- 21. DataColumn объект
DataTable объект нь DataColumnCollection
объект дахь DataColumn объектуудыг агуулах
ба тэдгээр нь DataTable объектын Columns
шинжид нь холбогдоно.
DataTable объектод нэг багана нэмэх бол
DataColumnCollection объектын Add() методыг
ашиглана.
Харин олон багана нэмэх бол AddRange()
методыг ашиглана.
Тогтохын Гантөр
- 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. 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. 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. 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. 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. DataRow объект
DataRow объект нь DataTable объектын нэг
мөрийг илэрхийлнэ.
DataTable объектын нэг мөр бичлэгийг утсгах,
өөрчлөх, нэмэх, дуудахад DataRow объект
ашиглагдана. Ө.х холбогдоогүй загварын хувьд
өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээхэд
ашиглагдана.
DataRow объектыг ашиглан тухан бичлэгийн
талбар тус бүрийн утгаруу хандаж болно.
Тогтохын Гантөр
- 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. DataRow объект
Бичлэг засварлах
1 -р арга: Тухайн бичлэгийн багананд хандах
замаар
DataRow row;
// талбарт индексаар хандах
row[0] = “New Value”;
// талбарт нэрээр хандах
row[“MyColumn”]= “New Value ”;
Тогтохын Гантөр
- 30. DataRow объект
Бичлэг засварлах
2-р арга: дараах методуудын тусламжтайгаар
BeginEdit() - засварлах горимыг эхлүүлнэ
CancelEdit() -буферлэгдсэн өөрчлөлтийг цуцлана.
EndEdit() -хийсэн өөрчлөлтийг баталгаажуулна.
Тогтохын Гантөр
- 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. DataRow объект
Бичлэгт хийсэн өөрчлөлтийг зөвшөөрөх ба цуцлах
DataRow- д өөрчлөлт хийсэн үед ADO.NET нь
өөрчлөлтийг хүлээх горимд оруулах ба RowState
шинжид харгалзах төлвийг (Added, Modified,
Deleted) тодорхойлдог.
Хүлээх
төлөвт оршиж байгаа өөрчлөлтийг
зөвшөөрөх эсвэл цуцлахдаа AccepChanges(),
RejectChanges() харгалзан ашиглана.
Дээрх методууд нь хамгийн сүүлд дуудагдсан
AcceptChanges() хүртэлх үйлдлүүд үйлчилнэ.
Мөн AccentChanges() метод нь EndEdint() методын,
RejectChanges() метод нь CancelEdit() методын
цаана шууд бусаар дуудагддаг.
Тогтохын Гантөр
- 33. DataRow объект
Бичлэгийн төлвийн мэдээллийг ашиглах
DataRow-д хийгдсэн өөрчлөлтийн мэдээллийг
авахдаа DataRow объектын RowState шинжийг
ашиглана.
RowState шинжийн утгыг хэрэглэгч тодорхойлох
боломжгүй. Харин
ADO.NET нь DataRow
объектод
хийгдсэн
үйлдлүүдийг
хариуг
RowState шинжид тодорхойлдог.
RowState
шинжийг
утгыг
цэвэрлэхдээ
AccentChanges(), RejectChanges() методуудыг
ашиглана. Unchanged утгатай болно.
Тогтохын Гантөр
- 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. DataRow объект
Бичлэг утгах
DataTable объектоос бичлэг устгахдаа DataRow
объектын Deleted() методыг ашиглана. Хэрвээ
тухайн бичлэгийн RowState шинж нь Added
утгатай байвал устгагдах боломжтой
Тухайн
бичлэгийн
хувьд
AcceptChanges()
методыг дуудах үед харгалзах хүснэгтээс тухайн
бичлэг устгагдана.
DataAdapter объектын Update() методыг дуудах
үед өгөгдлийн эх үүсвэрээс бичлэг устгагдана.
Тогтохын Гантөр
- 36. ШААРДЛАГА ОБЪЕКТУУД
Хэрвээ DataSet-д буруу мэдээлэл оруулсан
тохиолдолд түүнийг өгөгдлийн эх үүсвэрлүү
илгээхээс өмнө барьж чаддаггүй. Энэ тохиолдолд
алдааг олох, шийдвэрлэхэд нилээд төвөгтэй байдаг.
Ийм буруу өгөгдлөөс зайлсхийх арга нь DataColumn
объектын шинж чанаруудыг ашиглах юм.
Бас нэг арга нь шаардлага объектуудыг ашиглах юм.
Тогтохын Гантөр
- 37. ШААРДЛАГА ОБЪЕКТУУД
ADO.NET-д хоѐр төрлийн шаардлага объект
байдаг
uniqueConstraint шаардлага нь нэг талбарт утга
давтагдаж орохыг үл зөвшөөрөх дүрмийг
илэрхийлнэ (давтагдашгүй түлхүүр)
ForeignKeyConstraint шаардлага нь нэг хүснэгтийг
нөгөө хүснэгттэй холбох холбоосыг илэрхийлнэ.
(гадаад түлхүүр)
DataTable объект нь ConstraintCollection объект
дахь дээрх объектуудыг агуулах бах тэдгээр нь
DataTable
объектын Constraints
шинжид нь
холбогдоно.
Тогтохын Гантөр
- 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. ШААРДЛАГА ОБЪЕКТУУД
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. ШААРДЛАГА ОБЪЕКТУУД
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. ШААРДЛАГА ОБЪЕКТУУД
ForeignKeyConstraint объектыг үүсгэх
ForeignkeyConstraint нь холбогдсон хүснэгтүүдийн
хувьд өөрчлөлтийг хязгаарлахын тулд дараах
шинжүүдийг ашиглана.
DelereRule эх бичлэгийг устгахад охин бичлэг
яах вэ гэдгийг тодорхойлно. Анхны утга нь Cascade
байх ба энэ нь эх бичлэгийг дагаж охин бичлэгүүд
устгагдана.
UpadateRule эх бичлэгийн түлхүүр талбарын
утга өөрчлөгдөхөд яах вэ гэдгийг тодорхойлно.
Анхны утга нь Cascade
- 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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээх
DataAdapter объектын Update() метод нь DataSet дэхь
өөрчлөгдсөн, оруулсан, устгасан бичлэгүүдийг өгөгдлийн
эх
үүсвэрлүү
илгээхдээ
DeleteeCommand,
InsertCommand, UpdateCommand
объектууд дахь
командуудыг ашиглана.
CommandBuilder
Объектыг
ашигласнаар
оруулах,
засварлах, устгах командуудыг автоматаар үүсгэж болно.
Гэхдээ хамгийн оновчтой арга биш
Эсвэл DeleteCommand, InsertCommand, UpdateCommand
объектуудад тус бүрт нь хэрэглэгчийн алгоритмыг
тодорхойлж ашиглаж болно. Гүйцэтгэлийг харьцангуй
нэмэгдүүлдэг.
- 44. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
CommandBuilder ашиглан өөрчлөлтийн өгөгдлийн эх үүсвэрлүү илгээх
CommandBuilder объект нь DeleteCommand,
InsertCommand, UpdateCommand команд
объектуудыг байгуулахад шаардагдах мета
өгөгдлийг буцаахдаа DataAdapter объектын
SelectCommand объектыг ашигладаг.
SelectCommand нь ядаж нэг анхдагч түлхүүр талбар
юмуу давтагдахгүй түлхүүр талбарын агуулсан байх
ѐстой ба ингэснээр
DeleteCommand, UpdateCommand командуудаар
боловсруулагдах бичлэгийг олох боломжтой болно.
- 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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
CommandBuilder нь хэрэгцээт команд объектуудыг
үүсгэхэд хялбар байдаг хэдий ч бас дутагдалтай.
Хэрэглэгчийн алгоритмыг ашиглах нь дараах давуу
талуудтай
Хадгалагдсан процедур ашиглах
Хэд хэдэн хүснэгтүүдийг холбож, боловсруулалт хийх
Илүү уян хатан боловсруулалт
(CommandBuilder объектоор үүсгэгдсэн DELETE,
UPDATE ком андууд нь яг оргинал бичлэгийн бүх
талбарт тохирох бичлэгийг өгөгдлийн эх үүсвэрээс
хайдаг. Хэрвээ анхны утгууд нь өөрчлөгдсөн байвал
тухайн үйлдэл амжилтгүй болдог. )
- 49. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
CommandBuilder нь өөрчлөлт хийх
DeleteCommand, InsertCommand,
UpdateCommand объектуудыг автоматаар
үүсгэн, DataSet д хийгдсэн өөрчлөлтийг
өгөгдлийн эх үүсвэрлүү илгээх асуудлыг
DataAdapter ашиглан зохицуулдаг
Харин хэрэглэгчийн алгоритм ашиглах үед
тэдгээр өөрчлөлт хийх объет бүрийг
тодорхойлсон байх шаардлагатай
- 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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
CREATE PROCEDURE DeleteEmployees
@EmpID int
AS
SET NOCOUNT ON
DELETE FROM Employees WHERE
• EMPID = @EMPID
•
•
RETURN
GO
- 52. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
CREATE PROCEDURE GetEmployees
AS
SET NOCOUNT ON
SELECT EmpID, FirsName, LastName
FROM Employees
return
GO
- 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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
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. ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
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. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ
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. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ
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. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ
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));
- 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);