1 / 23

ADO.NET (cont.)

ADO.NET (cont.). Lecture 4 SE303-Database programming. Агуулга. ADO.NET Уяатай загвар ADO.NET Салангид загвар. ADO.NET Уяатай загвар. Уяатай загвар : (Definition) Өгөгдлийн санд холболт үүсгэн түүгээр дамжуулан унших, засах үйлдлүүдийн идэвхитэй хийдэг. Шинж чанар:

dino
Download Presentation

ADO.NET (cont.)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ADO.NET (cont.) Lecture 4 SE303-Database programming

  2. Агуулга • ADO.NET Уяатай загвар • ADO.NET Салангид загвар

  3. ADO.NET Уяатай загвар • Уяатай загвар: (Definition) • Өгөгдлийн санд холболт үүсгэн түүгээр дамжуулан унших, засах үйлдлүүдийн идэвхитэй хийдэг. • Шинж чанар: • Унших засах командуудыг амьд холболтоор дамжуулан гүйцэтгэх бөгөөд холболт нь үйлдлүүд дуусах хүртэл нээлттэй байдаг. • Эхлээд өгөгдлийн эх үүсвэр рүү холбох холболтын объектыг үүсгэх хэрэгтэй.

  4. ADO.NET Уяатай загвар • Холболтын пүүл • Өгөгдөл рүү холболт үүсгэх нь зардалтай, хугацаа их зарцуулдаг процесс юм. Зарим тохиолдолд дараалсан командууд биелүүлэхээс ч удаан. • Үүнийг багасгахын тулд ADO.NET нь ижил холбогч мөр бүрээс үүсэх төстэй холболтуудыг бүлэглэн дахин ашиглах зорилго бүхий холболтын пүүл үүсгэдэг. • Өмнөхтэй ижил холболт үүсгэх хүсэлтэд пүүлээс хариу өгөх боломжтой. Сервер рүү дахин хүсэлт илгээж мэдээллийг давтан шалгахаас зайлсхийх болно.

  5. ADO.NET Уяатай загвар • Холболтын пүүл (Анхаарах зүйлс) • Холболт нь автоматаар пүүл ашиглахаар тохируулсан байдаг. Үүнийг болиулахын тулд SqlConnection“Pooling=false” OleDbConnection“OLE DB Services=4” • Үл давхцагч холбогч мөрүүдээс бүрдэнэ. • Хэрэв хүсэлт ирэх үед пүүл дэх холболтууд ашиглагдаж байвал холболт сулартал хүсэлтийг хүлээлгэнд оруулна. Close эсвэл Dispose методоор сулрана. • Түүний агуулж байгаа бүх холболт суларсан буюу хугацаа хэтрэлт болсон үед хаагддаг.

  6. ADO.NET Уяатай загвар • Холболтын пүүл • SQL server-ийн хувьд мөр дотор нэмэлт параметрүүд зааж холболтын пүүлийг удирдаж болно. Үүнд: • Хамгийн их болон бага холболтын тоо • Пүүлээс холболтыг авах үед ресет хийх эсэх. • Онцлох параметр нь холболт хэр удаан амьд байхыг заах Lifetime юм.

  7. ADO.NET Уяатай загвар • Холболтын пүүл (Жишээ) • SQL Client-н хувьд параметрүүдийг хэрхэн ашиглах cnString = “Server=MYSERVER; Trusted_Connection=yes; database=films; connection reset=false; ” + “connection lifetime=60;” + //секундээр “min pool size=1; max pool size=50;”; //үндсэн утга нь 100 байдаг SqlConnectionconn = new SqlConnection(cnString);

  8. ADO.NET Уяатай загвар • Командын объект • Өгөгдлийн сан руу асуулга илгээх командын объектыг холболтын объект үүсгэсний дараа үүсгэдэг. Командын классууд нь өгөгдөл нийлүүлэгчээр бэлтгэгдсэн байдаг ба IDbCommandинтерфейсийг хэрэгжүүлсэн байх ёстой.

  9. ADO.NET Уяатай загвар • Командын объект үүсгэх • Командын объект үүсгэхэд шууд байгуулагчийг ашиглаж болно эсвэл ProviderFactory аргыг ашиглаж болно.

  10. ADO.NET Уяатай загвар • Командын объект үүсгэх (Жишээ) SqlConnectionconn = new SqlConnection(cnString); conn.Open(); string sql = “insert into movies(movie_Title,movie_Year,movie_Director) values (@title,@yr,@bestpicture)”; SqlCommandcmd = new SqlCommand(); //Холболтын объектыг тохируулах, асуулга командыг заах cmd.Connection = conn; cmd.commandText = sql; //асуулга дах параметрүүдийг бэлдэх cmd.Parameters.AddWithValue(“@title”, “Schindler’s list”); cmd.Parameters.AddWithValue(“@yr”, “1993”); cmd.Parameters.AddWithValue(“@bestpicture”,”Y”);

  11. ADO.NET Уяатай загвар • Командыг биелүүлэх • CommandTextproperty-д дамжуулан SQL командыг 4 хэлбэрээр гүйцэтгэж болно.

  12. ADO.NET Уяатай загвар • Командыг биелүүлэх • ExecuteReader: Энэ меthod-ийн шинжийг CommandBehaviorпараметрээр өөрчилж болно. • Жишээ:дараах заавар нэг мөр өгөгдөл буцаана. rdr = cmd.ExecuteReader(sql, CommandBehavior.SingleResult);

  13. ADO.NET Уяатай загвар • Командыг биелүүлэх. (CommandBehavior)-ийн утгууд • SingleRow. Асуулгаар нэг мөр буцаахыг заана. • SingleResult.Асуулгаар нэг утга буцаахыг заана. • KeyInfo.Түлхүүр баганын тухай мэдээлэл • SchemaOnly.Багануудын нэрсийг буцаана. dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly); string coll = dr.GetName(0); • SequentalAccess.Дараалсан хандалт хийхэд ашиглана. Энэ нь том хэмжээтэй бинари (BLOB) эсвэл текст талбаруудад хэрэглэгдэнэ. • CloseConnection.Уншигч хаагдсан үед арын холболтыг хаана.

  14. ADO.NET Уяатай загвар • Өгөгдлийн сангийн процедур дуудах • ӨС-ийн процедур гэдэг нь нэг нэрийн дорөгөгдлийн санд хадгалсан SQL кодын дараалал. • Процедур ажиллуулахад SqlCommand.CommandText property-д ажиллуулах процедурын нэрийг заана. CommandType property-д CommandType.StoredProcedureутгыг онооно. cmd.CommandText = “sp_AddMovie”; cmd.CommandType = CommandType.StoredProcedure; Cmd.ExecuteNonQuery();

  15. ADO.NET Уяатай загвар • Өгөгдлийн сангийн процедур дуудах • Процедурт оролт гаралтын параметр байгаа тохиолдолд тэдгээрийн команд объектын Parameters-д зааж өгнө. • Дараах жишээ нь параметр хэрхэн дамжуулах, процедур хэрхэн дуудахыг харууллаа.

  16. ADO.NET Уяатай загвар SqlCommandcmd = new SqlCommand(); cmd.CommandText = “sp_movies”; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(@PageRequest”, SqlDbType.Int); cmd.Parameters.Add(@TotalPages”, SqlDbType.Int); cmd.Parameters[0].Direction = ParameterDirection.Input; cmd.Parameters[0].Value = 1; cmd.Parameters[1].Direction = ParameterDirection.Output; cmd.CommandTimeout = 10; SqlDataReaderrdr = cmd.ExecuteReader(); while (rdr.Read()){ //Үр дүн дээр боловсруулалт хийх } rdr.Close(); inttotpages = cmd.Parameters[1].Value;

  17. ADO.NET Уяатай загвар • Параметртэй асуулга хийх • Параметртэй хувилбар илүү ойлгомжтой • Дүрмийн хувьд алдаа бага гардаг • SQL команд дах давхар кавычкын асуудлыг автоматаар шийддэг. • SQL Injection-ээс хамгаална. string title = “Schindler’’s List”; string yr = “1993”; string pic = “Y”; sql = “insert into movies(movie_Title,movie_Year,bestpicture) values”; sql += “(‘”+title+”’,”+yr+”,’”+pic+”’)”;

  18. ADO.NET Уяатай загвар • DataReaderобъект • Асуулгын дүнг мөр, багана хэлбэрээр уншдаг. • Мөрийн хандалт нь IDataReaderинтерфэйст, баганы хандалт нь IDataRecordинтерфэйсээр тодорхойлогддог. • DataReaderобъект – Мөр унших • DataReaderдээр Read method-ийг дуудах бүрт нэг мөрийг буцаадаг. • Уншигчийг ашиглаж дууссаны дараа хаах хэрэгтэй. • Уншигч хаагдсан эсэхийг DataReader.IsClosedproperty-г ашиглан мэдэж болдог.

  19. ADO.NET Уяатай загвар • DataReaderобъект – Мөр унших string q1 = “SELECT * FROM movies WHERE movie_Year < 1940”; string q2 = “SELECT * FROM movies WHERE movie_Year > 1980”; cmd.CommandText = q1 + “;” + q2; DbDataReaderrdr = cmd.ExecuteReader(); BoolreadNext = true; while (readNext) { while (rdr.Read) { MessageBox.Show(rdr.GetString(1)); } readNext = rdr.NextResult(); //өөр бичлэгийн олонлог руу шилжих } rdr.Close();

  20. ADO.NET Уяатай загвар • DataReaderобъект – Баганы утгыг унших • Тухайн нэг мөрийн баганын утгуудыг GetValue, GetString, GetInt32, GetDateTime, GetDoublemethod-уудад баганы дугаарыг зааж уншиж болно. cmd.CommandText = “SELECT movie_ID as Дцгаар ,movie_Titleas НэрFROM movies”; rdr = cmd.ExecuteReader(); rdr.Read(); string title; //баганы өгөгдлийг унших title = rdr.GetString(1); title = (string)rdr.GetSqlString(1); title = (string)rdr[“movie_Title”]; title = (string)rdr[1];

  21. ADO.NET Уяатай загвар • DataReaderобъект – Баганы утгыг унших • Баганы нэрсийг GetName method-оор мэдэж болно. Баганы нэрс тайлангийн толгой зохиоход ашиглаж болно. //баганы нэрсийг харуулах жишээ DbDataReaderrdr = GetReader(); for (int k = 0; k < rdr.FieldCount; k++){ Console.WriteLine(rdr.GetName(k)); //баганы нэр } rdr.Close();

  22. ADO.NET Уяатай загвар • DataReaderобъект – Баганы утгыг унших • Баганы бүрэн мэдээллийг GetSchemaTable method-ооруншиж мэдэж болно. Энэ method нь баганы нэрсийг агуулсан DataTable объект буцаана. DataTableschemaTable = rdr.GetSchemaTable(); intict = 0; foreach(DataRow r in schemaTable.Rows){ foreach(DataRowcin schemaTable.Columns){ Console.WriteLine(ict.ToString() + c.ColumnName + “:” + r[c]); ict++; } }

  23. HomeWork • ADO.NET-ийн Уяатай загварын талаар дэлгэрүүлэн унших • Лабораторийн ажил№2: • DataReaderашиглан өгөгдлийн сангийн хүснэгтээс өгөгдөл уншин түүнийгээ хэвлэж харуулах

More Related