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

Багш: Тогтохын Гантөр
ADO.NET ХОЛБООГҮЙ ЗАГВАРЫН ОНЦЛОГ


Холбоогүй загварыг ашиглаж, өгөгдлийн клиент
машин дээр байрлуулснаар сервэрийн санах ой,
холболт, боловсруулалт зэрэг нөөцүүдийг
хэмнэж, өгөгдөл боловсруулах үүргээс чөлөөлөх
давуу талтай



Өгөгдлийг унших болон бичих үед хугацаа, санах
ой их зарцуулах муу талтай

Багш: Тогтохын Гантөр
ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд
DataSet– хоорондоо хамаарал бүхий DataTable
хүснэгтүүдийг агуулсан, санах ой дахь холбоост
өгөгдлийн сан
 DataTable– өгөгдлийн эх үүсвэр хүснэгтүүдийг
хуулбарласан
мөр
(DataRow),
багана
(DataColumn),
бүтэцтэй
хүснэгт.
Талбарт
тавигдах шаардлага
(Constraint), хүснэгт
хоорондын хамаарал
(DataRelation), харах
хүснэгт (DataView) ийг мөн тодорхойлно.


Багш: Тогтохын Гантөр
ADO.NET ХОЛБООГҮЙ ЗАГВАР
Бүрэлдэхүүн объектууд

DataAdapter - өгөгдлийг DataSet –рүү ачаалах,
өгөгдөл дээр хийсэн өөрчлөлтийг буцааж өгөглийн эх
үүсвэрлүү илгээх байдлаар ажиллана.

DataTable
DataTable
DataTable

DataAdapter
InsertCommnad

UpdateCommand
DeleteCommand
SelectCommand

Өөрчлөлт
илгээх

DataSet

Өгөгдөл
ачаалх

SqlDataAdapter, OracleDataAdapter,OdbcAdapter, OleDbDataAdapter

Өгөгдөл
ачаалх



Database

Тогтохын Гантөр
DataAdapter объект
DataAdapter объект нь өгөгдлийн эх үүсвэр
болон завсарын эх үүсвэр (DataSet, DataTable )
хоѐрын хооронд гүүр байдлаар ажилладаг .
 DataAdapter объектын
Fill() методыг ашиглан
өгөгдлийн эх үүсвэрээс
DataSet
болон
DataTable объектуудруу өгөгдлүүдийг ачаалдаг.
 DataAdapter
объектын Update() методыг
ашиглан DataSet болон DataTable объектууд
дахь өгөгдлүүдэд хийсэн өөрчлөлтийг өгөгдлийн
эх үүсвэрлүү буцаадаг.
 DataAdapter объект нь
DataSet объектод
өөрчлөлт хийхдээ CommandBuilder объектыг
ашиглаж болно.


Багш: Тогтохын Гантөр
DataAdapter объект

Анхны
DataSet

өөрчлөх

Өөрчлөлсөн
DataSet

Fill()

DataAdapter

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

Update()

Багш: Тогтохын Гантөр
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);

Багш: Тогтохын Гантөр
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);

Багш: Тогтохын Гантөр
DataSet объект


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



DataSet нь ямар нэг өгөгдөл нийлүүлэгчээс
хамааралгүй байдаг.



DataSet нь өгөгдлийн эх үүсвэрээс ямагт салангид
ажиллана. Өгөгдлийн эх үүсвэрлүү хандаж
ажиллахдаа DataAdapter объектыг ашиглана.
Connection объекттой хэзээ ч шууд харилцдаггүй.
Багш: Тогтохын Гантөр
DataAdapter объект
DataSet объектыг үүсгэх

DataSet
DataTableCollection

DataRow
DataColumn

DataTabel

DataRelationCollection

DataRelation

DataRowCollection
DataCollemn Collection

Constraint

ConstraintCollection

DataView

DefaultView

Багш: Тогтохын Гантөр
DataSet объект
DataSet объект нь дараах хоѐр төрлийнх байна.




Хэлбэржүүлсэн DataSet (Typed Dataset)DataSet классаас удамшин, автоматаар үүсдэг
ба тухайн классаар үүсгэгдсэн XML схем файл
(.xsd) дахь мэдээллийг ашигладаг. Visual Studio
хөгжүүлэх орчинг ашиглан үүсгэдэг.
Хэрбэржүүлээгүй DataSet (Untyped DataSet)DataSet классаас удамшуулан гараар үүсгэдэг.

Багш: Тогтохын Гантөр
DataSet объект
DataSet объектыг үүсгэх


DataSet классын байгуулагч функцийн
тусламжтайгаар үүсгэнэ.
DataSet ds = new DataSet(“MyDataSet”);
DataSet ds = new DataSet();

Багш: Тогтохын Гантөр
DataTable объект
DataSet объект нь DataTableCollection объект
дахь DataTable объектуудыг агуулах ба тэдгээр
нь DataSet объектын Tables шинжид нь
холбогдоно.
 DataSet объектод нэг хүснэгт нэмэх бол
DataTableCollection объектын Add() методыг
ашиглана.
 Харин олон хүснэгт нэмэх бол AddRange()
методыг ашиглана.


Багш: Тогтохын Гантөр
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});

Багш: Тогтохын Гантөр
DataTable объект
Хүснэгттэй ажиллах

DataSet объект дахь хүснэгтүүдэд дараах
аргуудаар хандаж ажиллана.
 Нэрээр
DataTable dt= ds.Tables[“MyTable”];
 Индексээр
DataTable dt= ds.Tables[0];

Багш: Тогтохын Гантөр
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);


Тогтохын Гантөр
DataTable объект
Хүснэгттэй ажиллах


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

DataTable dt= ds.Tables.Add(“MyTable”);
ds.Remove(dt);



ds.Remove(“MyTable”);



ds.RemoveAt[0];



ds.Tables.Clear();

Тогтохын Гантөр
DataColumn объект
DataTable объект нь DataColumnCollection
объект дахь DataColumn объектуудыг агуулах
ба тэдгээр нь DataTable объектын Columns
шинжид нь холбогдоно.
 DataTable объектод нэг багана нэмэх бол
DataColumnCollection объектын Add() методыг
ашиглана.
 Харин олон багана нэмэх бол AddRange()
методыг ашиглана.


Тогтохын Гантөр
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);
Тогтохын Гантөр
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);

Тогтохын Гантөр
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);
//утга давтагдахгүй

Тогтохын Гантөр
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);

Тогтохын Гантөр
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);

Тогтохын Гантөр
DataRow объект
DataRow объект нь DataTable объектын нэг
мөрийг илэрхийлнэ.
 DataTable объектын нэг мөр бичлэгийг утсгах,
өөрчлөх, нэмэх, дуудахад DataRow объект
ашиглагдана. Ө.х холбогдоогүй загварын хувьд
өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээхэд
ашиглагдана.
 DataRow объектыг ашиглан тухан бичлэгийн
талбар тус бүрийн утгаруу хандаж болно.


Тогтохын Гантөр
DataRow объект
Мөр үүсгэн, хүснэгтэд нэмэх

DataTable dt= new DataTable();
dt.Columns.Add(“MyColumn”,typeof(System.String));
 DataRow row = dt.NewRow();
row[“MyColumn”] = “Item 1”;


dt.Rows.Add(row);

Тогтохын Гантөр
DataRow объект
Бичлэг засварлах

1 -р арга: Тухайн бичлэгийн багананд хандах
замаар
DataRow row;
// талбарт индексаар хандах
row[0] = “New Value”;
// талбарт нэрээр хандах
row[“MyColumn”]= “New Value ”;

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

BeginEdit() - засварлах горимыг эхлүүлнэ
CancelEdit() -буферлэгдсэн өөрчлөлтийг цуцлана.
EndEdit() -хийсэн өөрчлөлтийг баталгаажуулна.

Тогтохын Гантөр
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 ();

Тогтохын Гантөр
DataRow объект
Бичлэгт хийсэн өөрчлөлтийг зөвшөөрөх ба цуцлах
DataRow- д өөрчлөлт хийсэн үед ADO.NET нь
өөрчлөлтийг хүлээх горимд оруулах ба RowState
шинжид харгалзах төлвийг (Added, Modified,
Deleted) тодорхойлдог.
 Хүлээх
төлөвт оршиж байгаа өөрчлөлтийг
зөвшөөрөх эсвэл цуцлахдаа AccepChanges(),
RejectChanges() харгалзан ашиглана.
 Дээрх методууд нь хамгийн сүүлд дуудагдсан
AcceptChanges() хүртэлх үйлдлүүд үйлчилнэ.
 Мөн AccentChanges() метод нь EndEdint() методын,
RejectChanges() метод нь CancelEdit() методын
цаана шууд бусаар дуудагддаг.


Тогтохын Гантөр
DataRow объект
Бичлэгийн төлвийн мэдээллийг ашиглах
DataRow-д хийгдсэн өөрчлөлтийн мэдээллийг
авахдаа DataRow объектын RowState шинжийг
ашиглана.
 RowState шинжийн утгыг хэрэглэгч тодорхойлох
боломжгүй. Харин
ADO.NET нь DataRow
объектод
хийгдсэн
үйлдлүүдийг
хариуг
RowState шинжид тодорхойлдог.
 RowState
шинжийг
утгыг
цэвэрлэхдээ
AccentChanges(), RejectChanges() методуудыг
ашиглана. Unchanged утгатай болно.


Тогтохын Гантөр
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 ();
Тогтохын Гантөр
DataRow объект
Бичлэг утгах
DataTable объектоос бичлэг устгахдаа DataRow
объектын Deleted() методыг ашиглана. Хэрвээ
тухайн бичлэгийн RowState шинж нь Added
утгатай байвал устгагдах боломжтой
 Тухайн
бичлэгийн
хувьд
AcceptChanges()
методыг дуудах үед харгалзах хүснэгтээс тухайн
бичлэг устгагдана.
 DataAdapter объектын Update() методыг дуудах
үед өгөгдлийн эх үүсвэрээс бичлэг устгагдана.


Тогтохын Гантөр
ШААРДЛАГА ОБЪЕКТУУД
Хэрвээ DataSet-д буруу мэдээлэл оруулсан
тохиолдолд түүнийг өгөгдлийн эх үүсвэрлүү
илгээхээс өмнө барьж чаддаггүй. Энэ тохиолдолд
алдааг олох, шийдвэрлэхэд нилээд төвөгтэй байдаг.
 Ийм буруу өгөгдлөөс зайлсхийх арга нь DataColumn
объектын шинж чанаруудыг ашиглах юм.
 Бас нэг арга нь шаардлага объектуудыг ашиглах юм.


Тогтохын Гантөр
ШААРДЛАГА ОБЪЕКТУУД
ADO.NET-д хоѐр төрлийн шаардлага объект
байдаг
 uniqueConstraint шаардлага нь нэг талбарт утга
давтагдаж орохыг үл зөвшөөрөх дүрмийг
илэрхийлнэ (давтагдашгүй түлхүүр)
 ForeignKeyConstraint шаардлага нь нэг хүснэгтийг
нөгөө хүснэгттэй холбох холбоосыг илэрхийлнэ.
(гадаад түлхүүр)
 DataTable объект нь ConstraintCollection объект
дахь дээрх объектуудыг агуулах бах тэдгээр нь
DataTable
объектын Constraints
шинжид нь
холбогдоно.


Тогтохын Гантөр
ШААРДЛАГА ОБЪЕКТУУД
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);


Тогтохын Гантөр
Тогтохын Гантөр
ШААРДЛАГА ОБЪЕКТУУД
UniqueConstraint объектыг үүсгэх


Анхдагч түлхүүр үүсгэх
UniqueConstraint uc = new UniqueConstraint(“ID”,
dt.Columns[“CustomerID”], true);
dt.Constraints.Add(uc);



DataTable объектын ConstraintCollection олонлогт
нэмэх байдлаар үүсгэх
dt.Constraints.Add(“ID”, dt.Columns[“CustomerID”],
false);

Тогтохын Гантөр
ШААРДЛАГА ОБЪЕКТУУД
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”]);
ШААРДЛАГА ОБЪЕКТУУД
ForeignKeyConstraint объектыг үүсгэх





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

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);
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Өгөгдлийн эх үүсвэрлүү өөрчлөлтийг илгээх






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

CommandBuilder объект нь DeleteCommand,
InsertCommand, UpdateCommand команд
объектуудыг байгуулахад шаардагдах мета
өгөгдлийг буцаахдаа DataAdapter объектын
SelectCommand объектыг ашигладаг.



SelectCommand нь ядаж нэг анхдагч түлхүүр талбар
юмуу давтагдахгүй түлхүүр талбарын агуулсан байх
ѐстой ба ингэснээр
DeleteCommand, UpdateCommand командуудаар
боловсруулагдах бичлэгийг олох боломжтой болно.
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
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() методуудыг ашиглан
өөрчлөх командуудыг буцааж болно.

ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
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”);
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
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());

ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









CommandBuilder нь хэрэгцээт команд объектуудыг
үүсгэхэд хялбар байдаг хэдий ч бас дутагдалтай.
Хэрэглэгчийн алгоритмыг ашиглах нь дараах давуу
талуудтай
Хадгалагдсан процедур ашиглах
Хэд хэдэн хүснэгтүүдийг холбож, боловсруулалт хийх
Илүү уян хатан боловсруулалт
(CommandBuilder объектоор үүсгэгдсэн DELETE,
UPDATE ком андууд нь яг оргинал бичлэгийн бүх
талбарт тохирох бичлэгийг өгөгдлийн эх үүсвэрээс
хайдаг. Хэрвээ анхны утгууд нь өөрчлөгдсөн байвал
тухайн үйлдэл амжилтгүй болдог. )
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

CommandBuilder нь өөрчлөлт хийх
DeleteCommand, InsertCommand,
UpdateCommand объектуудыг автоматаар
үүсгэн, DataSet д хийгдсэн өөрчлөлтийг
өгөгдлийн эх үүсвэрлүү илгээх асуудлыг
DataAdapter ашиглан зохицуулдаг
 Харин хэрэглэгчийн алгоритм ашиглах үед
тэдгээр өөрчлөлт хийх объет бүрийг
тодорхойлсон байх шаардлагатай

ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх









Parameter объектын SourceColumn, SourceVersion
шинжүүд нь DataColumn объекттой холбогддог ба
DataAdapter эдгээр шинжүүдийг ашиглан DataRow
дэхь эх утгуудыг тодорхойлдог.
Ө.Х эх утга буюу тухайн мөрөнд өөрчлөлт хийхээс
өмнө байсан утгууд нь уг DataRow-д зохиулсан
өөрчлөх командын парамтр ачаалагддаг.
params.Add(“@OrderID”, SqlDbType.Int, 0, “OrderID”);
params[“@OrderID”].SourceVersion =
DataRowVersion.Original;
params[“@OrderID”].SourceVersion =
DataRowVersion.Current;
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

CREATE PROCEDURE DeleteEmployees
 @EmpID int
 AS
 SET NOCOUNT ON
 DELETE FROM Employees WHERE


• EMPID = @EMPID
•
•

RETURN

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

CREATE PROCEDURE GetEmployees
 AS
 SET NOCOUNT ON
 SELECT EmpID, FirsName, LastName
 FROM Employees
 return
 GO

ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх
















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









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

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;
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

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”);
ОБЪЕКТУУДЫН ХАРИЛЦАН АЖИЛЛАГАА
Хэрэглэгчийн алгоритмыг ашиглан өөрчлөлтийг өгөгдлийн эх үүсвэрлүү илгээх

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;
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

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”);

ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

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”);

ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ
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));
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ













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;
ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ

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”]);

ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ











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);

Más contenido relacionado

Similar a Lecture5 6 (20)

Data set дэх мєрийг устгах
Data set дэх мєрийг устгахData set дэх мєрийг устгах
Data set дэх мєрийг устгах
 
Data set дэх мєрийг устгах
Data set дэх мєрийг устгахData set дэх мєрийг устгах
Data set дэх мєрийг устгах
 
Blog vpii-lecture8
Blog vpii-lecture8Blog vpii-lecture8
Blog vpii-lecture8
 
өгөгдлийн сан
өгөгдлийн санөгөгдлийн сан
өгөгдлийн сан
 
Lecture15
Lecture15Lecture15
Lecture15
 
Лекц №10
Лекц №10Лекц №10
Лекц №10
 
Dynamic web 11
Dynamic web 11Dynamic web 11
Dynamic web 11
 
Лекц №13
Лекц №13Лекц №13
Лекц №13
 
Lesson1
Lesson1Lesson1
Lesson1
 
Visual programming-2 noanswer
Visual programming-2 noanswerVisual programming-2 noanswer
Visual programming-2 noanswer
 
Lecture
LectureLecture
Lecture
 
Лабораторийн ажил 1
Лабораторийн ажил 1Лабораторийн ажил 1
Лабораторийн ажил 1
 
сургааль үгс
сургааль үгссургааль үгс
сургааль үгс
 
U.cs101 лаборатори 8
U.cs101 лаборатори 8U.cs101 лаборатори 8
U.cs101 лаборатори 8
 
U.cs101 лаборатори 8-1
U.cs101 лаборатори 8-1U.cs101 лаборатори 8-1
U.cs101 лаборатори 8-1
 
Лекц №16
Лекц №16Лекц №16
Лекц №16
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
 
Se304 lec12
Se304 lec12Se304 lec12
Se304 lec12
 
Dynamic web 10
Dynamic web 10Dynamic web 10
Dynamic web 10
 
Se304 lec8
Se304 lec8Se304 lec8
Se304 lec8
 

Más de Gantur Togtokh

Practics onprogramming
Practics onprogrammingPractics onprogramming
Practics onprogrammingGantur Togtokh
 
Lecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарLecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарGantur Togtokh
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхGantur Togtokh
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхGantur Togtokh
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарGantur Togtokh
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцGantur Togtokh
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарGantur Togtokh
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцGantur Togtokh
 
Lecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарLecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарGantur Togtokh
 
Lecture3 aлгоритм түүний_шинжчанар.ppt
Lecture3 aлгоритм түүний_шинжчанар.pptLecture3 aлгоритм түүний_шинжчанар.ppt
Lecture3 aлгоритм түүний_шинжчанар.pptGantur Togtokh
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарGantur Togtokh
 
Lecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарLecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарGantur Togtokh
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарGantur Togtokh
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцGantur Togtokh
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхGantur Togtokh
 

Más de Gantur Togtokh (20)

Practics onprogramming
Practics onprogrammingPractics onprogramming
Practics onprogramming
 
Lecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарLecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанар
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэх
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэх
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанар
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэц
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанар
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэц
 
Sp l2
Sp l2Sp l2
Sp l2
 
Lecture9
Lecture9Lecture9
Lecture9
 
Lecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарLecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанар
 
Lecture3 aлгоритм түүний_шинжчанар.ppt
Lecture3 aлгоритм түүний_шинжчанар.pptLecture3 aлгоритм түүний_шинжчанар.ppt
Lecture3 aлгоритм түүний_шинжчанар.ppt
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанар
 
Lecture2 4
Lecture2 4Lecture2 4
Lecture2 4
 
Lecture1
Lecture1Lecture1
Lecture1
 
Lecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанарLecture4 5 aлгоритм_түүний_шинжчанар
Lecture4 5 aлгоритм_түүний_шинжчанар
 
Lecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанарLecture3 aлгоритм түүний_шинжчанар
Lecture3 aлгоритм түүний_шинжчанар
 
Lecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэцLecture2 kомпьютерийн ерөнхий бүтэц
Lecture2 kомпьютерийн ерөнхий бүтэц
 
Lecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэхLecture1 kомпьютерт мэдээлэл_дүрслэх
Lecture1 kомпьютерт мэдээлэл_дүрслэх
 
Vpii seminar1
Vpii seminar1Vpii seminar1
Vpii seminar1
 

Lecture5 6

  • 3. ХИЧЭЭЛИЙН АГУУЛГА: холбоогүй загварын онцлог  DataSet, түүний бүрэлдэхүүн объектууд  DataAdapter объект  Объектуудын харилцан ажиллагаа  ADO.NET
  • 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}); Багш: Тогтохын Гантөр
  • 18. DataTable объект Хүснэгттэй ажиллах DataSet объект дахь хүснэгтүүдэд дараах аргуудаар хандаж ажиллана.  Нэрээр DataTable dt= ds.Tables[“MyTable”];  Индексээр DataTable dt= ds.Tables[0]; Багш: Тогтохын Гантөр
  • 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. DataTable объект Хүснэгттэй ажиллах  DataSet объектоос хүснэгтүүдийг устгах  DataTable dt= ds.Tables.Add(“MyTable”); ds.Remove(dt);  ds.Remove(“MyTable”);  ds.RemoveAt[0];  ds.Tables.Clear(); Тогтохын Гантөр
  • 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));
  • 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. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ 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. ХОЛБООГҮЙ ЗАГВАРЫН ЖИШЭЭ       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);

Notas del editor

  1. е