240 likes | 476 Views
ADO.NET (cont.). Lecture 4 SE303-Database programming. Агуулга. ADO.NET Уяатай загвар ADO.NET Салангид загвар. ADO.NET Уяатай загвар. Уяатай загвар : (Definition) Өгөгдлийн санд холболт үүсгэн түүгээр дамжуулан унших, засах үйлдлүүдийн идэвхитэй хийдэг. Шинж чанар:
E N D
ADO.NET (cont.) Lecture 4 SE303-Database programming
Агуулга • ADO.NET Уяатай загвар • ADO.NET Салангид загвар
ADO.NET Уяатай загвар • Уяатай загвар: (Definition) • Өгөгдлийн санд холболт үүсгэн түүгээр дамжуулан унших, засах үйлдлүүдийн идэвхитэй хийдэг. • Шинж чанар: • Унших засах командуудыг амьд холболтоор дамжуулан гүйцэтгэх бөгөөд холболт нь үйлдлүүд дуусах хүртэл нээлттэй байдаг. • Эхлээд өгөгдлийн эх үүсвэр рүү холбох холболтын объектыг үүсгэх хэрэгтэй.
ADO.NET Уяатай загвар • Холболтын пүүл • Өгөгдөл рүү холболт үүсгэх нь зардалтай, хугацаа их зарцуулдаг процесс юм. Зарим тохиолдолд дараалсан командууд биелүүлэхээс ч удаан. • Үүнийг багасгахын тулд ADO.NET нь ижил холбогч мөр бүрээс үүсэх төстэй холболтуудыг бүлэглэн дахин ашиглах зорилго бүхий холболтын пүүл үүсгэдэг. • Өмнөхтэй ижил холболт үүсгэх хүсэлтэд пүүлээс хариу өгөх боломжтой. Сервер рүү дахин хүсэлт илгээж мэдээллийг давтан шалгахаас зайлсхийх болно.
ADO.NET Уяатай загвар • Холболтын пүүл (Анхаарах зүйлс) • Холболт нь автоматаар пүүл ашиглахаар тохируулсан байдаг. Үүнийг болиулахын тулд SqlConnection“Pooling=false” OleDbConnection“OLE DB Services=4” • Үл давхцагч холбогч мөрүүдээс бүрдэнэ. • Хэрэв хүсэлт ирэх үед пүүл дэх холболтууд ашиглагдаж байвал холболт сулартал хүсэлтийг хүлээлгэнд оруулна. Close эсвэл Dispose методоор сулрана. • Түүний агуулж байгаа бүх холболт суларсан буюу хугацаа хэтрэлт болсон үед хаагддаг.
ADO.NET Уяатай загвар • Холболтын пүүл • SQL server-ийн хувьд мөр дотор нэмэлт параметрүүд зааж холболтын пүүлийг удирдаж болно. Үүнд: • Хамгийн их болон бага холболтын тоо • Пүүлээс холболтыг авах үед ресет хийх эсэх. • Онцлох параметр нь холболт хэр удаан амьд байхыг заах Lifetime юм.
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);
ADO.NET Уяатай загвар • Командын объект • Өгөгдлийн сан руу асуулга илгээх командын объектыг холболтын объект үүсгэсний дараа үүсгэдэг. Командын классууд нь өгөгдөл нийлүүлэгчээр бэлтгэгдсэн байдаг ба IDbCommandинтерфейсийг хэрэгжүүлсэн байх ёстой.
ADO.NET Уяатай загвар • Командын объект үүсгэх • Командын объект үүсгэхэд шууд байгуулагчийг ашиглаж болно эсвэл ProviderFactory аргыг ашиглаж болно.
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”);
ADO.NET Уяатай загвар • Командыг биелүүлэх • CommandTextproperty-д дамжуулан SQL командыг 4 хэлбэрээр гүйцэтгэж болно.
ADO.NET Уяатай загвар • Командыг биелүүлэх • ExecuteReader: Энэ меthod-ийн шинжийг CommandBehaviorпараметрээр өөрчилж болно. • Жишээ:дараах заавар нэг мөр өгөгдөл буцаана. rdr = cmd.ExecuteReader(sql, CommandBehavior.SingleResult);
ADO.NET Уяатай загвар • Командыг биелүүлэх. (CommandBehavior)-ийн утгууд • SingleRow. Асуулгаар нэг мөр буцаахыг заана. • SingleResult.Асуулгаар нэг утга буцаахыг заана. • KeyInfo.Түлхүүр баганын тухай мэдээлэл • SchemaOnly.Багануудын нэрсийг буцаана. dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly); string coll = dr.GetName(0); • SequentalAccess.Дараалсан хандалт хийхэд ашиглана. Энэ нь том хэмжээтэй бинари (BLOB) эсвэл текст талбаруудад хэрэглэгдэнэ. • CloseConnection.Уншигч хаагдсан үед арын холболтыг хаана.
ADO.NET Уяатай загвар • Өгөгдлийн сангийн процедур дуудах • ӨС-ийн процедур гэдэг нь нэг нэрийн дорөгөгдлийн санд хадгалсан SQL кодын дараалал. • Процедур ажиллуулахад SqlCommand.CommandText property-д ажиллуулах процедурын нэрийг заана. CommandType property-д CommandType.StoredProcedureутгыг онооно. cmd.CommandText = “sp_AddMovie”; cmd.CommandType = CommandType.StoredProcedure; Cmd.ExecuteNonQuery();
ADO.NET Уяатай загвар • Өгөгдлийн сангийн процедур дуудах • Процедурт оролт гаралтын параметр байгаа тохиолдолд тэдгээрийн команд объектын Parameters-д зааж өгнө. • Дараах жишээ нь параметр хэрхэн дамжуулах, процедур хэрхэн дуудахыг харууллаа.
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;
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+”’)”;
ADO.NET Уяатай загвар • DataReaderобъект • Асуулгын дүнг мөр, багана хэлбэрээр уншдаг. • Мөрийн хандалт нь IDataReaderинтерфэйст, баганы хандалт нь IDataRecordинтерфэйсээр тодорхойлогддог. • DataReaderобъект – Мөр унших • DataReaderдээр Read method-ийг дуудах бүрт нэг мөрийг буцаадаг. • Уншигчийг ашиглаж дууссаны дараа хаах хэрэгтэй. • Уншигч хаагдсан эсэхийг DataReader.IsClosedproperty-г ашиглан мэдэж болдог.
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();
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];
ADO.NET Уяатай загвар • DataReaderобъект – Баганы утгыг унших • Баганы нэрсийг GetName method-оор мэдэж болно. Баганы нэрс тайлангийн толгой зохиоход ашиглаж болно. //баганы нэрсийг харуулах жишээ DbDataReaderrdr = GetReader(); for (int k = 0; k < rdr.FieldCount; k++){ Console.WriteLine(rdr.GetName(k)); //баганы нэр } rdr.Close();
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++; } }
HomeWork • ADO.NET-ийн Уяатай загварын талаар дэлгэрүүлэн унших • Лабораторийн ажил№2: • DataReaderашиглан өгөгдлийн сангийн хүснэгтээс өгөгдөл уншин түүнийгээ хэвлэж харуулах