Visual Basic.NET

                                     Visual Basic.NET
Visual Basic .NET-ын ємнєх хувилбаруудаас ялгарах онцлог, нэмэгдсэн шинэлэг ойлголтуудыг энэхvv
хичээлээс уншиж мэдэх болно. Visual Basic .NET нь шинэчлэгдэн чадварлаг Объект Хандалтат
Программчлалын (Object Oriented) хэл болсон. Мєн вэб хєгжvvлэхэд зориулсан Web Form-ууд нь
броаузер-суурьтай Web Appliction-ыг хялбар, хурдан хийх боломж олгоно. Ингээд бусад єєрчлєлт,
шинэчлэлийн талаартанилцуулъя.


Массив
Option base мэдэгдэл хасагдсан. Єєр хэлбэл бидний мэдэх VB6-д массивийн эхлэл 1-ээс байсан бол одоо
VB.NET-д массивийн эхлэл 0-ээс эхлэдэг болсон. Жишээ нь:

    Dim astrValue(20) as String
Дээрх код нь 21 эльмент бvхий тэмдэгт мєр тєрлийн массив vvсгэнэ.
Тэмдэгт мєр л vv хандахнь
Тэмдэгт мєрийг тодорхой урттай зарлахыг vл зєвшєєрнє.Тэмдэгт мєр нь єєрийн гэсэн шинж чанараар
хангагдсан. Жишээ нь:
    Dim strName As String
    StrName = “ “.PadRight(30)
StrName хувьсагчийг 30-н хоосон зайгаардvvргэж байна.
Б vхэл тоон тєрлvvд
Зарим бvхэл тоон тєрлvvдийн авах утгын хэмжээ єєрчлєгдсєн. Жишээлбэл Integer тєрєл -32,678 -ээс 32,767
хvртэл утга авдаг байсан бол одоо VB.NET-д -2,147,483,648 -аас 2,147,483,647 хvртэл утга авна.
Decimal тєрєл
Currency тєрєл хасагдан, оронд нь Decimal тоон тєрєл нэмэгдсэн. Энэ тєрєл нь бусад хэлнvvд болон
єгєгдлийн баазтай бvрэн зохицох чадвартай ба 0-ээс 28 хvртэл оронг багтааж чадна. є.х Бvхэл ба бутархай
оронгийн нийт тоо нь 29-аасихгvй байна.
Char тєрєл
Char тєрєл нь 2 байт хэмжээтэй болсон ба UNICODE тэмдэгтvvдийг агуулж чадах болсон.
Object тєрєл
Variant тєрєл Object тєрлєєрсолигдсон. Object тєрєл нь єєр нэмэлт бусадєгєгдлийн тєрлийг хадгалж чадна.
DefType
DefType-г тодорхойлсноор хувьсагч ямар vсгээр эхэлснээс шалтгаалан тухайн хувьсагчийн тєрлийг
тодорхойлж болдог байсан билээ. Тэгвэл одоо vvнийг хэрэглэх боломжгvй болсон ба хувьсагчийг заавал
зарлах шаардлагатай.
Boolean vйлдэл
“And”, “Or”, “XOR” vйлдлvvд нь Boolean болон бит vйлдлvvдэд хэрэглэгддэг байсан. Одоо шинэ BitAnd,
BitOr, BitXOR, BitNot гэсэн vйлдлvvдийг хэрэглэх боломжтой. Эдгээр vйлдлvvдийг Boolean болон тоон
тєрлvvдэдхэрэглэж болно.
Vйлдэлхялбарчлах
VB.NET-д AndAlso, OrElse хоёр шинэ логик vйлдэл нэмэгдсэн. Хэрэв та олон логик vйлдэл ашиглаж
байгаа     бол    AndAlso,    OrElse    нь     илvv     vйлдлээс    зайлсхийх    боломж      олгоно.
OrElse логик vйлдлийг ашигласан vед эхнийх нь vнэн байх юм бол илэрхийлэл шууд vнэх гэсэн утга
буцаана.
AndAlso логик vйлдлийг ашигласан vед эхнийх нь худал бол илэрхийлэл шууд худал гэсэн утга буцаана.
Жишээ нь:
Хэрэв доорх кодыг ашиглавал FlagTestFalse() ба FlagTestTrue() функцvvд нь 2-уул дуудагдана.


                                                  1
Visual Basic.NET

   If FlagTestFalse() And FlagTestTrue() Then
       MessageBox.Show("           'Энэ нєхцєл биелэхгvй")
   End If


   Private Function FlagTestFalse() As Boolean
       MessageBox.Show("FlagTestFalse()")
       Return False
   End Function


   Private Function FlagTestTrue() As Boolean
       …
       Return True
   End Function
Хэрэв And vйлдлийн оронд AndAlso vйлдлийг ашиглавал FlagTestTrue() функц нь дуудагдахгvй.


   If FlagTestFalse() AndAlso FlagTestTrue() Then
       MessageBox.Show("           'Энэ нєхцєл биелэхгvй")
   End If
Объектын vндсэн property
Объектын vндсэн property vгvй болсон. Жишээ нь: VB6-д TextBox1=”Text1” гэж оноохыг зєвшєєрдєг
байсан бол VB.NET-д заавал TextBox1.Text=”Text1” гэж бичихийг шаардана.
Классын шинж чанарыг (property) тодорхойлох
VB-ийн ємнєх хувилбаруудад классын шинж чанарыг тодорхойлохдоо Property Get/ Set/ Let тvлхvvр
vгvvдийг хэрэглэдэг байсан билээ. VB.NET-д нэг нэрэн дор Get, Set-ийг хэрэглэнэ. Жишээлбэл:


  Private mstrFirstName As String
  Private mintCode As Integer = -1


   Property FirstName() As String
       Get
           Return mstrFirstName
       End Get
       Set(ByVal Value As String)
           mstrFirstName = Value
       End Set
   End Property




                                                2
Visual Basic.NET

    Property Code() As Integer
           Get
             Code = mintCode
           End Get
           Set(ByVal Value As Integer)
             If Value = 0 Or Value = 1 Then
                 mintCode = Value
             Else
                 mintCode = -1
             End If
           End Set
    End Property
Хэрэглэгчийн тодорхойлсонтєрл vvд
Type…End Type тvлхvvр vгийг ашиглан хэрэглэгчийн тодорхойлсон тєрлvvдийг vvсгэдэг байсан бол
VB.NET-д Structure…End Structure тvлхvvр vгийг ашиглана.


    Structure Customer
           Public CustID As Integer
           Dim CustomerName As String
           Private TotalSalesAmount As Decimal
    End Structure
Хувьсагч тодорхойлоходгарсан єєрчлєлт
 Dim intLoop, intValue as Integer
VB6-д intLoop хувьсагч нь Variant тєрєл авах болно. Харин VB.NET-д intLoop, intValue хувьсагчууд нь 2-
уул Integer тєрєл байх юм.
Объект vvсгэх
Объект vvсгэхдээдараахаргуудаар vvсгэж болно.
   a. Dim oCust As New Customer()
   b. Dim oCust As Customer = New Customer()
   c. Dim oCust As Customer
   d. oCust = New Customer()
Method-оор солигдсонфункц vvд

Функц       Єєрчлєлт

Circle()    System.Drawing.DrawEllipse

Line()      System.Drawing.DrawLine



                                                  3
Visual Basic.NET


Atn()       System.Math.Atan

Atn()       System.Math.Atan

Sgn()       System.Math.Sign

Sqr()       System.Math.Sqrt

Rnd()       System.Math.Rnd

Round()     System.Math.Round

IsNull()    IsDBNull()

IsObject() IsReference()

VarType() System.Object.GetType()

MsgBox      MessageBox.Show()

LSet        System.String.PadRight

RSet        System.String.PadLeft

DoEvents System.WinForms.Application.DoEvents
Зарим єєрчлєлтvvд
Хэлэнд гарсан бусадєєрчлєлтvvдээсдурдахад:

       Pset, Scale-ууд хасагдсан
       Empty, Null-ууд хасагдсан
       IsEmpty() нь хасагдсан
       Илэрхийлэлд Null утга оноовол алдааєгєх болно
       Тогтмолууд нь ControlChars классд багтах болсон
       Функцын дараа $ тэмдэг хэрэглэх шаардлагагvй
       Let a=b нь ажиллахгvй
       Class_Initialize, Class_Terminate–ууд нь хасагдсан
       VarPtr, VarPtrArray, VarPtrStringArray, ObjPtr, StrPtr–ууд нь хасагдсан

WinForm-ийн єєрчлєлтvvд
Visual Basic.NET-ийн формуудадмаш их єєрчлєлт орсон.

       Бvх контролын TabIndex-ийг 0 оноож болно


                                                      4
Visual Basic.NET

         Zorder нь runtime vед контролуудын байрлалыг єєрчилдєг
         Шинэ LinkLabel контрол нь гиперлинк хийхэд зориулагдсан
         GroupBox контрол Frame контролоор солигдсон
         Шинэ Splitter контролыг ашиглан Explorer-like интерфайс vvсгэж чадна
         Drag & Drop бvрэлдэхvvнд ихээхэн єєрчлєлт орсон
         DDE (Dinamic Data Exchange)-г дэмждэггvй
         Time контролын Interval-ийг 0 болгохыг зєвшєєрдєггvй
         OLE контролыг дэмжддэггvй
         Shape контрол байхгvй
         Line контрол байхгvй
         Form.PrintForm method хасагдсан
         Clipboard ажиллагааих єєрчлєдсєн. Одоо System.WinForms.Clipboard ашиглана.
         Формын Name property-г утгыг авах боломжгvй
         Формыг Show хийхийн тулд формтєрлийн хувьсагч зарлах ёстой
         Form болон контролын координатуудыг Twips хэмждэг байсан бол .NET-д Pixel-ээр хэмждэг
          болсон.
         Єгєгдлийг DAO болон RDO ашиглан боловсруулж чадахгvй. Зєвхєн DAO ашиглагдсан прожекттой
          vед хэрлэглэх боломжтой.

Debuging
Debug.Print нь Debug.Write болон Debug.WriteLine-уудаарсолигдсон.
Єгєгдлийн баазын хэрэгсэлvvд
DataView цонх хасагдан оронд нь Server Explorer нэмэгдсэн. Бvх єгєгдлийн баазын хэрэгсэлvvд нь SQL
Server 2000 –тай ажиллахадзориулагдсан.
Web Application-ууд
Visual Basic.NET дээр вэб хэрэглээний программ байгуулах ажиллагаа эрс єєрчлєгдсєн. Хэрэв танд VB6
дээрвэб хийх зарим техникийг хэрэглэсэн прожект бий бол тэдгээрийг дахин бичих хэрэгтэй болно.

         IIS Application-ууд дэмжигддэггvй харин оронд нь ASP.NET болон WebForm-уудыг хэрэглэх
          шаардлагатай.
         DHTML Application-ууд мєн дэмжигддэггvй
         ActiveX Document-ууд мєн дэмжигддэггvй



Visual Studio .NET ба IDE | дээшээ | DataTable класс |       нvvр хуудас



DataTable класс (Visual Basic .NET)
 o       DataGrid–ийг єгєгдлєєрдvvргэж сурах
 o       DataTable болон DataRow классын талаар vндсэн мэдлэг олж авах


                                                         5
Visual Basic.NET

DataTable класс
DataTable класс нь єгєгдлийн баазын хvснэгттэй тєстэй .NET-ийн класс юм. Энэ нь мєрvvдээс тогтох ба
мєр болгонд баганы олонлог багтсан байдаг. Багана болгон нэртэй байх ба мєн єгєгдлийн тєрєл, аттрибут
(жишээ       нь       ReadOnly      –зєвхєн       уншигдах),      DefaultValue-тай      байна.
DataTable класс нь DataRow oбъектуудаас тогтох ба DataRow объект болгон нь DataColumn объекуудаас
бvрддэг.

DataTable-ийг хэрэглэх нь
DataTable нь олон тооны мєртэй мєр болгон нь олон утга агуулах тийм єгєгдлийг хадгалах, боловсруулах
vед хэрэглэгдэнэ. Та DataTable-ээс єєр єгєгдєлтэй харьцах механизм (user-defined массив, классын
collection, ADO Recordset) хэрэглэж болох боловч DataTable хэрэглэхэдилvv хялбарбайдаг.

DataTable vvсгэх
Юуны ємнє DataTable тєрлийн хувьсагчийг глобалаар (бvх процедуруудаасгадна) зарлах хэрэгтэй.
   Public Class frmProductsSimple
          Inherits System.Windows.Forms.Form


   Private mdt As DataTable
Одоо      DataTable-ийг     хэрхэн      єгєгдлєєр     дvvргэх      талаар      жишээ      vзье.

     Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) _
   Handles btnLOad.Click
         Dim dr As DataRow
         Dim intLoop As Integer


         Me.Cursor = Cursors.WaitCursor


         ' Шинэ DataTable объект vvсгэх
         mdt = New DataTable()


         ' DataTable-д баганууд vvсгэх
         mdt.Columns.Add("ProductID")
         mdt.Columns.Add("ProductName")
         mdt.Columns.Add("UnitPrice")
         mdt.Columns.Add("UnitsInStock")


         ' DataTable–г єгєгдлєєр дvvргэх
         For intLoop = 1 To 10


                                                 6
Visual Basic.NET

              ' Шинэ мєр vvсгэх
              dr = mdt.NewRow


              ' Шинэ мєрийн багануудад єгєгдєл нэмэх
              dr("ProductID") = intLoop
              dr("ProductName") = "Product " & intLoop.ToString()
              dr("UnitPrice") = intLoop * 10
              dr("UnitsInStock") = intLoop * 20


              ' Шинэ мєрийг DataTable-рvv нэмэх
              mdt.Rows.Add(dr)
         Next


         ' Grid-ийн багануудыг AutoSize хийх
         grdProducts.PreferredColumnWidth = grdProducts.AutoColumnSize
         ' Grid-ийг єгєгдлєєр дvvргэх
         grdProducts.DataSource = mdt


         Me.Cursor = Cursors.Default
    End Sub
Та дээрх процедурыг ашигласнаар бvтээгдэхvvнтэй холбоотой єгєгдлийг загвар байдлаар vvсгэх болно.
10-н удаа давталт хийх ба давталт болгонд шинэ DataRow объект vvсэх болно. DataRow объект нь
DataTable-д тодорхойлсон багануудын тодорхойлолтуудтай хамт байгуулагддаг. DataRow-д буй
багануудын нэг болох ProductID багана руу давталтын тоологч (intLoop)-ийг, “Product 1”, “Product 2”, гм-
ийг ProductName багана руу гэх мэтээр дvvргэлээ. Эцэст нь DataTable-ийн Rows collection-ний Add
method-оор DataRow oбъектыг DataTable рvv нэмсэн байна.

DataRow-тэй ажиллах
Grid-ийг єгєгдлєєр дvvргэсний дараа нэг мєр сонгож єгєгдлєє дэлгэцэнд vзvvлэх хэрэгцээ гардаг. vvнийг
хийхийн тулд та хэрэглэгчийн товшилт (click) хийсэн мєрийн дугаарыг мэдсэн байх хэрэгтэй. Хэрэв та
мєрийн дугаараа мэдэж байгаа тохиолдолд DataTable-ийн Rows collection-ийг ашиглах тухайн мєрийг
DataRow-рvv дамжуулж чадна.
Private Sub grdProducts_Click(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles grdProducts.Click
     Dim dr As DataRow
     Dim intRow As Integer


     ' Идэвхтэй мєрийн дугаар авах



                                                   7
Visual Basic.NET

     intRow = grdProducts.CurrentCell.RowNumber
     ' DataRow-ийг DataTable-ээс авах
     dr = mdt.Rows(intRow)


     ‘TextBox контролуудыг єгєгдлєєр дvvргэх
     txtProductID.Text = dr("ProductID")
     txtProductName.Text = dr("ProductName")
     txtUnitPrice.Text = dr("UnitPrice")
     txtUnitsInStock.Text = dr("UnitsInStock")
End Sub

ADO.NET

 o   ADO.NET классуудыг танилцуулга
 o   ADO.NET-г ADO-той харьцуулахнь




ADO.NET классуудыг танилцуулга
ADO.NET нь санах ойд єгєгдлийн олонлогуудыг байгуулахыг зєвшєєрдєг объектын загвар юм. Та
єгєгдлийн олонлогуудын єгєгдлийг кодоос, текст файлаас, exchange server-ээс, єгєгдлийн баазын
системээсавч болно.
ADO.NET-д сурах зайлшгvй хэрэгтэй хэд хэдэн класс бий. Танд энэ бvх классуудын товч тайлбарлая.
DataSet - Энэ классыг санах ой дахь єгєгдлийн баазгэж зvйрлэж болно. DataSet нь нэг болон тvvнээс дээш
DataTable объектуудыг багтааж чаддаг ба тэдгээрийн хооронд relationship тогтоож чадна. Энэ классад
жинхэнэ єгєгдлєєс уншсан єгєгдєл байрлах ба ямар нэгэн єєрчлєлт бvр нь тvvн рvv хийгдэж байдаг.
ADO.NET-ийн єєр объектыг ашиглан єєрчлєлтийг єгєгдлийн баазруу хадгална.
DataTable – Энэ класс нь єгєгдєл бvхий мєрvvдийг агуулж байдаг. Мєр болгон багануудаас бvрдэх ба
баганаболгон нэгэн тєрєл бvхий єгєгдлvvдийг агуулж байдаг.
DataView – Энэ класс нь онцлог шинжээр харагдах DataTable юм. Энэ объект нь DataTable объект дээр
эрэмбэлэлтvvд, шvvлтvvрvvдийг хэрэглэж байдаг.
Connection - Энэ класс нь єгєгдлийн эхтэй (data source) холболт хийхэд хэрэглэгддэг. Энэ классад vндсэн
OLE DB, SQL server гэсэн 2 тєрєл байна.
Command – Энэ класс нь SQL мэдэгдлvvдийг єгєгдлийн эх рvv буцаан дамжуулж байдаг. Та SQL болон
stored procedure-уудыг ашиглан бvх єгєгдлийг сэргээх ба єєрчлєлт хийж чадна. Энэ классад
єєрчлєлтvvдийг хадгалж чадах, єгєгдєл сэргээх method-ууд бий.
CommandBuilder - Энэ класс нь SELECT, INSERT, UPDATE, DELETE command oбъектуудыг
байгуулахадхэрэглэгддэг.
DataAdapter - Энэ класс нь DataSet эсвэл DataTable-ийг єгєгдлийн баазаас єгєгдлєєр дvvргэхэд
хэрэглэгддэг. DataAdapter нь єгєгдлийн баазтай холболт vvсгэх ба SQL мэдэгдэлд тохирох command


                                                  8
Visual Basic.NET

oбъектыг байгуулж, єгєгдлийг сэргээн, DataSet эсвэл DataTable-ийг байгуулаад, єгєгдлийн баазаас
салгагдана.
DataReader - Энэ класс нь єгєгдлийн эхээс єгєгдлийг хурдан уншиж чадах ба forward-only, зєвхєн
уншигдах курсор юм. Энэ класс нь DataGrid-vvдийг, ListBox-уудыг, ComboBox-уудыг дvvргэхэд хамгийн
тохиромжтой.



ADO классуудыг хэрэглэх нь




Та дээрхээс .NET ийн зарим классууд яаж єгєгдлийг дамжуулж буйг, DataSet-vvд нь хэрхэн
хэрэглэгддэгийг харж байна. DataAdapter-ууд нь SQL Server, Oracle, Access зэрэг єгєгдєл хадгалагч (Data
Store)-аас єгєгдєл уншин DataSet-vvдийг дvvргэдэг. DataSet нь байгуулагдсан бол энэ нь WinForm,
WebForm, Web Service эсвэл бvр єєр ямар нэгэн Java дээр бичигдсэн Unix сервэр дээр ажиллах вэб
хуудасандч хэрэглэгдэж болно.



OleDb ба SqlClient
Энэ 2 нь ялгаатай шинж бvхий Connection, Command, CommandBuilder, DataAdapter, DataReader
классуудтай. OleDb нь OLE DB provider-уудыг хэрэглэн єгєгдлийн эхvvдийг авахад зориулагдсан. Энэ 2
нь єєр єєр NameSpace-д байрлана.
Доор OleDb классуудыг хэрхэн тодорхойлохыг жишээ болгон бичье.
    Dim oConn As OleDb.OleDbConnection
    Dim oCmd As OleDb.OleDbCommand
    Dim oBuild As OleDb.OleDbCommandBuilder
    Dim oDA As OleDb.OleDb.OleDbDataAdapter
    Dim oDR As OleDb.OleDb.OleDbDataReader
Доор      Sql      классуудыг      хэрхэн      тодорхойлохыг       жишээ       болгон      бичье.

    Dim oConn As SqlClient.SqlConnection
    Dim oCmd As SqlClient.SqlCommand
    Dim oBuild As SqlClient.SqlCommandBuilder



                                                  9
Visual Basic.NET

    Dim oDA As SqlClient.SqlDataAdapter
    Dim oDR As SqlClient.SqlDataReader



ADO.NET-г ADO-той харьцуулах нь

ADO.NET нь ADO-гийн сайжруулсан, боловсронгуй хувилбар юм. Энэ 2 объект загварын зарим vндсэн
єєрчлєлт байдаг боловч эцсийн vр дvн нь ижил хэвээр билээ. Танд єгєгдєл хадгалах, єгєгдєл сэргээх,
єгєгдєлд засвар хийх объект загвар хэрэгтэй билээ. ADO нь танд тvvнийг RecordSet-vvдийн тусламжтай
гvйцэтгэхийг зєвшєєрдєг бол ADO.NET нь танд тvvнийг DataSet-д болон бусад объектын тусламжтай
хийхийг зєвшєєрдєг.
ADO.NET ба ADO-гийн vндсэн ялгаа нь ADO.NET нь єгєгдлийн vл холбогдсон (disconnected) хэлбэр,
ADO нь холбогдсон тєрлийн объект загваргэдэгт байгаабилээ.



ADO.NET Connection Объект ба Command Объект (Visual
Basic .NET)

Connection Объект
ADO.NET Connection объект нь єгєгдлийн баазын холболтыг программ болон database engine 2-ын
хооронд хийхэд хэрэглэнэ. Хэрэв та єєрийн SQL Server лvv холболт хийх гэж байгаа бол дараах маягаар
бичиж болно.
Provider=sqloledb;Data              Source=(local);Initial              Catalog=Northwind;User
ID=sa;Password=;
Access 2000 єгєгдлийн баазхэрэглэх бол provider-ийн тэмдэгт мєр доорх загвартай байна.
Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:Northwind.mdb



Command Объект
OleDbCommand объект нь ADO-гийн command объекттой маш тєстэй. Энэ нь SQL мэдэгдлvvдийг
хадгалан єгєгдлийн эхтэй дахин дахин ажиллахад хэрэглэгдэнэ. OleDbCommand объект нь SELECT,
INSERT, UPDATE, DELETE мэдэгдлvvдийг ажиллуулж чаддаг юм.




                                                  10
Visual Basic.NET

Жишээ




Доорх жишээнд INSERT мэдэгдлийг ашиглан Northwind баазын Customers хvснэгтэнд мөр нэмнэ.

 1. Шинээр SQLTester solution vvсгэ.
 2. Формдоо txtRows, txtSQL гэсэн 2 TextBox контрол нэмэн, дээрх загвартай болгоно.
 3. Button-доо btnExecute гэсэн нэр єгєн, Click үзэгдэл дээрдараахкодыг бичнэ vv.

      Private Sub btnExecute_Click(ByVal                  sender     As   Object,     ByVal   e   As
System.EventArgs) _
   Handles btnExecute.Click
         Dim oCmd As OleDb.OleDbCommand
         Dim strConn As String


         Try
               'Холболтын тэмдэгт мөр
               strConn = "Provider=sqloledb;"
               strConn &= "Data Source=(local);"
               strConn &= "Initial Catalog=Northwind;"
               strConn &= "User ID=sa;"
               strConn &= "Password=;"


               ' Command Объект vvсгэх
               oCmd = New OleDb.OleDbCommand()
               ' Command Объектод хэрэглэгдэх Холболт хийх
               oCmd.Connection = New OleDb.OleDbConnection(strConn)
               ' Холболтыг нээх
               oCmd.Connection.Open()
               ' SQL-ийг TextBox-оос аван Command Объектод руу хийх
               oCmd.CommandText = txtSQL.Text



                                                  11
Visual Basic.NET

                ' SQL-ийг ажиллуулан, нийт єєрчлєгдсєн бичлэгийн тоог TextBox-д
оноох
               txtRows.Text = oCmd.ExecuteNonQuery().ToString()


                               MessageBox.Show("SQL     мэдэгдэл     амжилттай      биелэлээ       ",
"btnExecute_Click()")


               ' Холболтыг хаах
               oCmd.Connection.Close()


         Catch oExcept As Exception
               txtRows.Text = 0.ToString()
                          MessageBox.Show("SQL       ажиллах     явцад    алдаа    гарлаа:     "   &
oExcept.Message, _
                                "btnExecute_Click()")


         End Try
     End Sub
Command объектын ExecuteNonQuery method-ыг ажиллуулснаар єгєгдлийн баазад CommandText дах SQL
мэдэгдэлмааньхэрэгжинэ. єєрєєрхэлбэлєгєгдлийн баазадмєр нэмэх vйлдлийг хийнэ.
Та F5 товч даран программаа ажиллуулна. INSERT мэдэгдэл байгаа text box-д зєв INSERT, UPDATE,
DELETE мэдэгдлvvдийг бичиж Execute SQL товчыг даран ажиллагааг нь шалгаарай.



Data Binding буюу єгєгдєл бэхлэх (Visual Basic .NET)

 o   Єгєгдлийг DataGrid-рvv бэхлэх
 o   Combo Box-уудтай ажиллах
 o   Параметртэй query vvсгэх
 o   Єгєгдлийг гараас бэхлэх



Єгєгдєл бэхлэх (Data binding) нь єгєгдлийн эхийг vvсгэх процесстой холбоотой ба автоматаарформ дээрх
контролуудыг єгєгдлийн эхээр хангаж байдаг. Windows формууд єгєгдєл бэхлэлтийг хийж гvйцэтгэхдээ
ADO.NET-тэй холбогдож ашигладаг. Та єгєгдєл бэхлэх vед холболт хийх, dataset vvсгэх зэрэг код бичих
шаардлаггvй ба .NET framework єєрєє ADO.NET-д хэрэгтэй кодыг vvсгэдэг. Формыг єгєдєлтэй бэхлэсний
дараа, форм дээрх контролуудыг єгєгдлийн тодорхой эльментvvдтэй бэхлэж чадна. Ихэнхи vед TextBox
контролын Text property-г єгєгдлийн эхийн нэг баганатай бэхлэдэг билээ. Мєн Picturebox контролын
зурагуудыг,    контролын      background     болон    бусад    property-нуудыг   бэхлэж    болно.



                                                12
Visual Basic.NET

Єгєгдєл бэхлэлтийг Энгийн єгєгдєл бэхлэх, Комплекс єгєгдєл бэхлэх гэсэн 2 тєрєл байдаг.
Энгийн єгєгдєл бэхлэх нь контрол руу дан элемент бэхлэхийг зєвшєєрдєг. Жишээ нь TextBox, Label
контролуудыг                 єгєгдєлтэй               бэхлэлт                 хийх.
Комплекс єгєгдєл бэхлэх нь контрол руу нэгээс их элемент бэхлэхийг зєвшєєрдєг. Комплекс єгєгдєл
бэхлэхийг зєвшєєрдєг контролуудад DataGrid, ComboBox, ListBox гэх мэт контролууд орно.



Єгєгдлийг DataGrid-рvv бэхлэх
Єгєгдєл бэхлэхэд хэрэглэгдэх vндсэн чанарууд нь .NET-н орчинд хvснэгтийг Grid-д харуулахад илэрдэг.
Ингээд хэрхэн DataGrid бvхий форм vvсгэн, єгєгдлийн баазтай холбох жишээ vзье. Эхлээд vндсэн
алхмуудыг тодорхойлъё:

 1. Windows Form байгуулах
 2. DataSet-ийг vvсгэх болон бэлтгэх
 3. DataGrid контролыг формруу нэмээд, єгєгдєл рvv бэхэлнэ.



Windows Form байгуулах:
Доорх алхмуудыг даган хийснээр жишээний формообайгуулах болно.

 a. Visual Studio.NET–ийг нээж, New Project товчлуурыг сонгон
 b. Windows Application-ийг Template-ээс сонгон, Name textbox-д DataBinding гэж нэр єгєн прожектоо
    vvсгэнэ.
 c. Properties цонхон дах формын property-нуудаас Name property-д frmProducts, Text property-д Product
    Information.оноож єгнє.



DataSet-ийг vvсгэх болон бэлтгэх

 o   DataAdapter Wizard-ийг хэрэглэх
 o   DataSet класс vvсгэх

-DataAdapter Wizard-ийг хэрэглэх
Єгєгдлийн баазтай холболт хийхийн тулд OleDbDataAdapter component-ийг Toolbox цонхны Data tab-аас
сонгон форм руу чирэх эсвэл давхар товшилт хийнэ. Энэ нь хэдэн алхам бvхий тохируулганы цонх
дэлгэцэнд гаргана. DataAdapter нь єгєгдлийн баазаас єгєгдєл дамжуулах ба DataSet нь DataGrid-ийг
бэхлэхэдхэрэглэгддэг билээ.

 a. OleDbDataAdapter-ийг Toolbox цонхний Data tab-аассонго
 b. Тvvнийг формруу чирээдорхих
 c. Data Adapter Configuration Wizard цонх гарч ирэх болно.
 d. Эхний дэлгэц нь мэдээлэлийн чанартай тул “Next” товч дарна.


                                                  13
Visual Basic.NET

 e. Дараагийн дэлгэцэнд та єєрийн хэрэглэх єгєгдлийн холболтыг хийж єгнє.




        Хэрэв та New Connection товчлуурыг сонговол дараах дэлгэц гарч ирэх болно. Энэ дэлгэцнээс та data
        provider-ыг сонгох ба data provider-т хэрэгтэй мэдээлэлvvдийг бєглєх болно.




        I.   Та єєрийн хэрэглэх гэж буй SQL server-ийн нэрийг сонгоно. Энэ жишээнд (local) гэж сонгосон
             байна.
       II.   SQL server лvv холбогдоход шаардлагатаймэдээллийг (хэрэглэгчийн нэр, пасспорт) оруулна.
      III.   Northwind єгєгдлийн баазыг сонгоно. Энэ баазын Product хvснэгтээс бид мэдээлэлавах болно.

        Жич: Хэрэв та MSAccess хэрэглэх гэж буй бол Provider tab-аас Microsoft Jet 4.0 OLE DB Provider
        сонгон, Connection tab-д єгєгдлийн баазын нэрийг сонгож єгнє.

 f.     Wizard-ын дараагийн алхамд Query Type сонгоход хэрэгтэй болно. Та vvнээс:



                                                    14
Visual Basic.NET

       o    Use SQL Statement –ийг сонгон SQL мэдэгдлийг байгуулж,
       o    Create New Stored Procedure-аас wizard-аар stored procedure vvсгэн,
       o    Use Existing Stored Procedures-ийг сонгон сервэр дэх єгєгдлийн баазад буй stored procedure-
           yyдаасхэрэглэх боломжтой болно.

      Use SQL Statement–ийг сонгон цааш vргэлжлvvлнэ.




 b. Энэ дэлгэцэнд SQL мэдэгдэл бичих эсвэл Query Builder-ийг сонгон SQL мэдэгдлvvдийг байгуулж
      болно. Энэ жишээний хувьд дараах SQL мэдэгдлийг бичлээ.
 c.        SELECT ProductID, ProductName, UnitPrice, UnitsInStock
 d.        FROM Products
 e. “Next” товчыг дарснаарэнэхvv wizard-ийн тєгсгєлийн алхам руу очих ба “Finish” товчоор vйл явцыг
      дуусганаа. Vvний vр дvнд OleDbConnection1, OleDbDataAdapter1 объектууд Tray цонхон дээр
      нэмэгдсэн байх болно.

Жич: Энэ жишээнд OleDbDataAdapter-ийг ашигласан. Хэрэв та зєвхєн SQL Server ашиглах бол Sql*
component-уудыг ашиглавалилvv vр дvнтэй байх болно.


-DataSet класс vvсгэх
Visual Studio.NET-д ємнє нь vvсгэсэн DataAdapter объектын query-д суурилан Dataset классыг vvсгэхэд
маш хялбарбайдаг. Dataset классыг vvсгэхдээ дараахалхмуудыг хэрэглэнэ.

 a. Data ->Generate Dataset коммандыг VS.NET цэснээс сонгоно.
 b. Generate Dataset гэсэн диалог цонх дэлгэцэнд гарч ирнэ.
 c. “New” option button-ийг сонгон, dsProducts гэсэн нэр єгнє.
 d. “OK” товчлуурыг дарснаар DataSet бvдvvвч тодорхойлолт бvхий файлба класс зэргийг vvсгэнэ.




                                                     15
Visual Basic.NET




Эдгээр алхмуудыг гvйцэтгэсний дараа dsProducts1 контрол формын Tray дээр нэмэгдэх ба энэ контрол нь
dsProducts.xsd файлыг зааж байдаг. dsProducts.xsd файл нь таны ємнє нь тодорхойлсон SQL мэдэгдлээс
vvссэн хvснэгт, багануудыг агуулсан XML бvдvvвч тодорхойлолт юм.



DataGrid-ийг єгєгдлєєр дvvргэх
Юуны ємнє та DataGrid контролыг frmProducts формдоо байрлуулана. Уг контролыг сонгон Property
цонхон дах DataSource property-д dsProducts1, DataMember property-д Products тус тус оноож єгнє.
Одоо бид DataGrid контролыг DataSet рvv бэхлэсэн байгаа боловч DataSet нь форм ачаалагдахад
автоматаарєгєгдлєєрдvvргэгддэггvй. Иймд форм Load event-д дараахкодыг бичиж єгнє.
    Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As
System.EventArgs) _
   Handles MyBase.Load


         ' DataSet контролыг хоослох
         dsProducts1.Clear()
         ' DataSet контролыг Products хvснэгтээс єгєгдлєєр дvvргэх
         OleDbDataAdapter1.Fill(dsProducts1, "Products")


   End Sub
Ингээд бид DataGrid контролыг дvvргэж чадах боллоо. Та одоо прожектоо ажиллуулан (F5) шалгаж vзнэ
vv.




                                                16
Visual Basic.NET

Combo Box-уудтай ажиллах
Бидний vvсгэсэн жишээ багахан хэмжээний єгєгдєлтэй vед тєвєггvй ажиллах боловч хэдэн мянган
бичлэгтэй vед тийм ч тохиромжтой биш байх болно. Тиймд бvтээгдэхvvний тєрлийг combo box-оос
сонгон, тухайн тєрлийн бvтээгдэхvvнvvдийг дэлгэцэнд DataGrid дээр харуулбал илvv тохиромжтой.
Эхлээд combo box-ийг єгєгдлєєрдvvргээд, дараань combo box-ийг хэрэглэн дэлгэцэнд data grid-д харагдах
єгєгдлийг хязгаарлая.

Хоёр дох Data Adapter, DataSet нэмэх

 1. Дахин OleDbDataAdapter-ийг Toolbox-ийн Data tab-аассонгон, формдээрбайрлуулна.
 2. <Ємнєх жишээнд хэрэглэж байсан Northwind єгєгдлийн баазын холболтыг хэрэглэнэ. “Next” товч
    дарна.
 3. “Use SQL Statements”-ийг сонгон, “Next” товч дарна.
 4. Дараах SQL мэдэгдлийг бичнэ:
 5. SELECT CategoryID, CategoryName FROM Categories
 6. Энэ диалогоос “Advanced Options” товчлуурыг сонгоно.
 7. “Generate Insert, Update, and Delete statements” сонголтыг арилгана. Учир нь бид зєвхєн combo box
    дvvргэх гэж байгаатул эдгээр коммандуудыг хэрэглэх шаардлагагvй.


“Finish”            товчыг             дарснаар            OleDbDataAdapter-ыг                vvсгэнэ.
Одоо Data ->Generate Dataset коммандыг VS.NET цэснээс сонгон, DataSet-ийн нэрийг dsCat гэж єгнє vv.

Combo Box-ыг DataAdapter луу бэхлэх

 1. Формд Combo box байрлуулан, идэвжvvл
 2. Name property-д cboCategories
 3. DataSource property-д dsCat1
 4. DropDownStyle property-д DropDownList
 5. DisplayMember property-д Categories.CategoryName. Энэ нь дэлгэцэнд харагдах багана ба data grid
    контролын єгєгдлийг єєрчлєхєдхэрэглэгдэх баганаутгаа авахадтуслана.
 6. ValueMember property-д Categories.CategoryID онооно. ValueMember property нь item сонгогдоход
    жинхэнэ утгыг авна. єєрєєр хэлбэл CategoryName сонгогдоход харгалзах CategoryID-г энэ property-
    гоос авч чадна.

Combo Box-ыг єгєгдєлтэй болгох
Combo Box-ыг єгєгдєлтэй болгохын тулд ємнє нь Grid-ийг єгєгдлєєр дvvргэхэд хэрэглэж байсан Load
event дээрзарим код бичнэ.
    Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As
System.EventArgs) _
    Handles MyBase.Load


         dsProducts1.Clear()


                                                 17
Visual Basic.NET

          OleDbDataAdapter1.Fill(dsProducts1, "Products")


          ' Combo Box-д єгєгдєл дvvргэхэд хэрэглэгдэн DataSet-ыг бэлтгэх
          dsCat1.Clear()
          OleDbDataAdapter2.Fill(dsCat1, "Categories")


      End Sub
Ингээд ComboBox-ыг єгєгдлєєр дvvргэх ажил маань дууслаа. :-) Одоо та F5 товч даран формоо
ажиллуулахаддараахдvр зураг харагдах болно.




Параметртай Query vvсгэх
Одоо бvгдээрээтєрєл сонгогдоход data grid дээр харгалзах бvтээгдэхvvнvvдийг харуулж чаддаг болъё.

 1. Data   grid  контролыг    єгєгдєлжvvлдэг       кодыг    формын     Load    event-ээс   хасна.
    Дараахкодыг формын Load event-ээс хаснауу.
 2.      dsProducts1.Clear()
 3.      OleDbDataAdapter1.Fill(dsProducts1, "Products")
 4. OleDbDataAdapter1 объектын SelectCommand property-г єєрчлєн, CategoryID параметр авах
    боломжтой болгоно. OleDbDataAdapter1 объектыг сонгон Properties window (F4) дах SelectCommand
    property-гийн дэд property-нуудыг дэлгэнэ. CommandText property-г сонгон, Build (…) товчлуурыг
    дарснаар дэлгэцэнд Query Builder диалог гарч ирэх болно. WHERE буюу нєхцлийг нэмснээр дараах
    байдалтайхарагдах болно.
 5.      SELECT ProductID, ProductName, UnitPrice, UnitsInStock
 6.      FROM Products
 7.      WHERE CategoryID = ?
      OK товчлуурыг дарснаарєєрчлєлт мааньхадгалагдах болно.
      OleDbDataAdapter1 объектыг сонгон Data -> Generate Dataset менюг сонгон, Ok товчлуурыг дарснаар
      одоо байгаа dsProducts dataset-ээ дахин байгуулалт хийнэ.




                                                 18
Visual Basic.NET

 8. Хэрэглэгч       combo        box-оос       item       сонгоход       ажиллах      код    нэмэх
    Эхлээд cboCategories combo box дээр давхар товшилт хийн, SelectedIndexChanged event процедур
    vvсгэнэ. Энэ event нь combo box-оос item сонгох vед vvсдэг. Ингээд дараахкодыг бичнэ vv.
 9.     Private Sub cboCategories_SelectedIndexChanged(                        ByVal   sender     As
      System.Object, _
 10. ByVal e As System.EventArgs) Handles cboCategories.SelectedIndexChanged
 11.
 12.            With OleDbDataAdapter1.SelectCommand.Parameters
 13.                .Item(0).Value = cboCategories.SelectedValue
 14.            End With
 15.
 16.            ' dataset-ийг цэвэрлэх
 17.            DsProducts1.Clear()
 18.            ' dataset-ийг параметрын утгыг хэрэглэх єгєгдєлжvvлэх
 19.            OleDbDataAdapter1.Fill(DsProducts1, "Products")
 20. End Sub
     Data adapter-ийн SelectCommand объектыг ашиглан тухайн Parameter объектыг дамжуулахад
     хэрэглэж байна. Энэ Parameter объектын Value property-д оноож буй combo box-ийн SelectedValue
     property нь ValueMember-ийн идэвхтэй байгаа утга (CategoryID)-г авна. Combo box-оос нэр сонгоход
     dataset нь тухайн тєрлєєрдvvргэгдэн, data grid-д автоматаарбайрлана.
Хэрэв та бvх vйлдлийг зєв хийсэн бол F5 товч даран прожектоо ажиллуулаад combo box-оос тєрлийн нэр
сонгон, datagrid харгалзахєгєгдлєєрдvvргэгдэж байхыг харах болно.



Єгєгдлийг гараас бэхлэх
Ямар нэгэн Wizard хэрэглэхгvйгээр DataSet класс vvсгэн, Data grid болон бусад контролыг єгєгдлєєр
дvvргэж болох ба энэ аргыг хэрэглэснээр маш уян хатан, илvv хурдан ажиллах программ хийх болно.
Одоо ємнєх жишээтэй ижил прожект vvсгэе.

 1. Та дахин шинэ DataBindGrid гэсэн прожект vvсгэнэ.
 2. frmProducts гэсэн форм vvсгэнэ vv.
 3. Label, ComboBox, DataGrid контролуудыг формднэмнэ.
 4. Тэдний нэрийг харгалзан Label1, cboCategories, grdProducts гэж єєрчлєнє.
 5. Формын Load event-д дараахкодыг бичнэ.

    Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As
System.EventArgs) _
      Handles MyBase.Load
          Call ComboLoad()
      End Sub



                                                  19
Visual Basic.NET

ComboLoad event нь cboCategories combo box-ийг DataTable классаасєгєгдлєєрдvvргэнэ.
   Private Sub ComboLoad()
         Dim da As OleDb.OleDbDataAdapter
         Dim dt As DataTable = New DataTable()
         Dim strSQL As String
         Dim strConn As String


         strConn = "Provider=sqloledb;Data
          Source=(local);Initial Catalog=Northwind;User ID=sa"


         strSQL = "SELECT CategoryId, CategoryName               "
         strSQL &= "FROM Categories"


         Try
               ‘Data adapter vvсгэх
               da = New OleDb.OleDbDataAdapter(strSQL, strConn)


               ‘DataTable-ийг єгєгдлєєр дvvргэх
               da.Fill(dt)


               With cboCategories
                   ' эхлээд Property-нуудад утга онооно
                   .DisplayMember = "CategoryName"
                   .ValueMember = "CategoryId"


                   ' тэгээд DataSource-ийг єгнє
                   .DataSource = dt
               End With


         Catch e As Exception
               MessageBox.Show(e.Message)


         End Try
   End Sub




                                                20
Visual Basic.NET

Жич: Хэрэв та Access єгєгдлийн бааз ашиглаж байгаа бол strConn                 тэмдэгт мєрєнд
“Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User           ID=Admin;Data   Source=C:Program
FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb” гэж бичээрэй.
DisplayMember, ValueMember property-нуудад SQL мэдэгдэлд буй багануудын нэрийг єгєх ёстой.
DisplayMember нь combo box-ийн дэлгэцэнд харагдах єгєгдлvvдийг авах баганыг зааж байдаг. Харин
ValueMember property нь єєр баганы утгыг хадгалж байдаг combo box-ийн vл харагдах жагсаалтюм.

DataGrid-ийг дvvргэх
Combo box-ын SelectedIndexChanged event-д дараахкодыг бичье:
       Private Sub cboCategories_SelectedIndexChanged(                      ByVal   sender   As
System.Object, ByVal e As _
   System.EventArgs) Handles cboCategories.SelectedIndexChanged
         Call GridLoad()
   End Sub
GridLoad процедур нь combo box-оос сонгосон утгаар Grid-ийг дvvргэнэ.
   Private Sub GridLoad()
         Dim da As OleDb.OleDbDataAdapter
         Dim dt As DataTable = New DataTable()
         Dim strSQL As String
         Dim strConn As String


                strConn = "Provider=sqloledb;Data                       Source=(local);Initial
Catalog=Northwind;User ID=sa"


         strSQL = "SELECT ProductID, ProductName, UnitPrice, UnitsInStock "
         strSQL &= "FROM Products "
         strSQL &= "WHERE CategoryID = " & cboCategories.SelectedValue


         Try
               ‘Data adapter vvсгэх
               da = New OleDb.OleDbDataAdapter(strSQL, strConn)


               ‘DataTable-ийг єгєгдлєєр дvvргэх
               da.Fill(dt)


               grdProducts.PreferredColumnWidth = DataGrid.AutoColumnSize
               grdProducts.DataSource = dt




                                                 21
Visual Basic.NET

         Catch e As Exception
               MessageBox.Show(e.Message)


         End Try
     End Sub


Connection     ба     Command        Объектууд      |    дээшээ      |     DataReader     Объект
нvvр хуудас




ADO.NET DataReader Объект (Visual Basic .NET)

 o   DataReader объект, т vvнийг хэрэглэх
 o   List Box контолыг бv тээгдэхvvнээр дvvргэх
 o   PDSAListItemNumeric класс
 o   Combo box контролыг дvvргэх
 o   Бv тээгдэхvvний мэдээллийгдэлгэцэндгаргах

<>



DataReader объект, тvvнийг хэрэглэх
ADO.NET-д DataSet, DataTable, DataReader объектуудыг VB6-гийн RecordSet объектын оронд хэрэглэх ба
DataReader объект нь forward-only тєрлийн cursor юм. DataReader объектод курсорын тєрлvvд болох
SequentialAccess, KeyInfo, SchemaOnly, SingleResult, SingleRow тєрлvvдийг хэрэглэж болох боловч vр дvнг
vзэхдээ            зєвхєн           дараагийнхыг               vзэхийг           зєвшєєрдєг.
OleDbDataReader объект нь єгєгдлийн баазаасбичлэгvvдийг маш хурдан уншдаг давуу талтай.


DataReader объектыг ашиглан ListBox, ComboBox контролуудыг єгєгдлєєрдvvргэх жишээ vзье.




                                                  22
Visual Basic.NET




Одоо дээрх формын контролуудыг єгєгдлєєрдvvргэх жишээ vзье.

    List Box контолыг бvтээгдэхvvнээр дvvргэх
    Combo box контролыг дvvргэх
    Бvтээгдэхvvний мэдээллийг дэлгэцэнд гаргах




    Private Sub frmProduct_Load( ByVal sender As System.Object, ByVal e As
System.EventArgs) _
     Handles MyBase.Load
         ' List Box контолыг бvтээгдэхvvнээр дvvргэх
          ListLoad()


         ' Combo box контролуудыг дvvргэх
         SupplierLoad()
         CategoryLoad()
     End Sub




                                                  23
Visual Basic.NET

List Box контолыг бvтээгдэхvvнээр дvvргэх
   Private Sub ListLoad()
        Dim oCmd As OleDb.OleDbCommand
        Dim oDR As OleDb.OleDbDataReader
        Dim oItem As PDSAListItemNumeric
        Dim strSQL As String
        Dim strConn As String


        strConn = ConnectStringBuild()


        strSQL = "SELECT ProductID, ProductName "
        strSQL &= "FROM Products"


        Try
              oCmd = New OleDb.OleDbCommand()
              With oCmd
                   .Connection = New OleDb.OleDbConnection(strConn)
                   .Connection.Open()
                   .CommandText = strSQL
                   oDR = .ExecuteReader(CommandBehavior.SequentialAccess)
              End With


              lstProducts.Items.Clear()
              Do While oDR.Read()
                   oItem = New PDSAListItemNumeric()
                   With oDR
                       oItem.ID = CInt(.Item("ProductID"))
                       oItem.Value = .Item("ProductName").ToString()
                   End With
                   lstProducts.Items.Add(oItem)
              Loop
              If lstProducts.Items.Count > 0 Then
                   lstProducts.SetSelected(0, True)
              End If




                                           24
Visual Basic.NET

         Catch oExcept As Exception
              MessageBox.Show(oExcept.Message)
         End Try
   End Sub

ExecuteReader method дуудагдснаар SELECT мэдэгдэл хэрэгжин, DataReader объект буцаж ирсэн утгыг
заах болно. Давталтанд DataReader объектын бvх мєрийг Read method-ыг ашиглан уншина.
PDSAListItemNumeric классыг ашиглан List box-ийг дvvргэснээр ID-д харгалзах утгыг авах, давхардсан
бvтээгдэхvvн нэмэхээсзайлс хийх болно.
Жич: Хэрэх танд дээрх чанар хэрэггvй бол та давталтанд дотор зєвхєн дараах ганц мєр кодыг хэрэглэж
болно.
 lstProducts.Items.Add(oDR.Item("ProductName"))



PDSAListItemNumeric класс
Дээрх   кодонд ашиглагдсан PDSAListItemNumeric            классыг     хэрхэн    vvсгэхийг    vзье.
Шинэ класс файлыг Project -> Add Class цэсийг сонгон clsListItems.vb гэсэн нэр єгнє vv. Тэгээд дараах
кодыг бичнэ.
   Public Class PDSAListItemNumeric
         Private mstrValue As String
         Private mintID As Integer


         Public Sub New()


         End Sub


         Public Sub New(ByVal strValue As String, _
          ByVal intID As Integer)
              mstrValue = strValue
              mintID = intID
         End Sub


         Property Value() As String
              Get
                    Return mstrValue
              End Get
              Set(ByVal Value As String)
                    mstrValue = Value


                                                 25
Visual Basic.NET

               End Set
         End Property


         Property ID() As Integer
               Get
                     Return mintID
               End Get
               Set(ByVal Value As Integer)
                     mintID = Value
               End Set
         End Property


         Public Overrides Function ToString() As String
               Return mstrValue
         End Function
    End Class


Дээрх класс нь Value, ID гэсэн 2 property-тэй ба энэ нь текст болон тvлхvvр бvхий хvснэгтээс List box
контролыг дvvргэхэд ашиглагдана. ToString method нь vндсэн Object єгєгдлийн тєрлєєс бvх классууд
удамшуулж авдаг.



Combo box контролыг дvvргэх
Product формдээрх 2 combo box-ыг Categories ба Suppliers-vvдээр дvvргэх ёстой.
    Private Sub CategoryLoad()
         Dim oCmd As OleDb.OleDbCommand
         Dim oDR As OleDb.OleDbDataReader
         Dim strSQL As String
         Dim strConn As String
         Dim oItem As PDSAListItemNumeric


         strConn = ConnectStringBuild()


         strSQL = "SELECT CategoryID, CategoryName "
         strSQL &= "FROM Categories"


         Try


                                                  26
Visual Basic.NET

              oCmd = New OleDb.OleDbCommand()
              With oCmd
                   .Connection = New OleDb.OleDbConnection(strConn)
                   .Connection.Open()
                   .CommandText = strSQL
                   ' DataReader объектыг хаах vед холболтыг хаана.
                   oDR = .ExecuteReader(CommandBehavior.CloseConnection)
              End With


              Do While oDR.Read()
                   oItem = New PDSAListItemNumeric()
                   With oDR
                         oItem.ID = CInt(.Item("CategoryID"))
                         oItem.Value =.Item("CategoryName").ToString()
                   End With


                   cboCategory.Items.Add(oItem)
              Loop
              oDR.Close()


              'oCmd.Connection.Close() –vvнийг бичих шаардлагагvй.


         Catch oExcept As Exception
              MessageBox.Show(oExcept.Message)


         End Try
   End Sub
SupplierLoad() процедурыг дээрхтэй тєстэй байдлаар vvсгэнэ.

 1. CategoryLoad процедурын хуулбарыг vvсгэн, нэрийг нь SupplierLoad гэж єєрчилнє.
 2. SELECT мэдэгдэлд байгаа хvснэгт болон багануудын нэрийг солино. Хvснэгтийн нэрийг Suppliers,
    багануудын нэрийг SupplierID, CompanyName гэж єєрчилнє.
 3. Бvх cboCategory combo box –ыг cboSupplier combo box болгон єєрчилнє.




                                                 27
Visual Basic.NET

Бvтээгдэхvvний мэдээллийг дэлгэцэнд гаргах
List box контролыг хэрхэн дvvргэх талаар vзсэн билээ. Одоо List box-оос Item сонгоход бусад
контролуудыг дvvргэхийг vзье.
Формын design view горимд List box контрол дээр давхар товшилт хийн дараах vзэгдлийн процедур
vvсгэнэ vv.


    Private Sub lstProducts_SelectedIndexChanged( ByVal sender As Object,
ByVal e As _
System.EventArgs) Handles lstProducts.SelectedIndexChanged
        FormShow()
   End Sub


   Private Sub FormShow()
        Dim oCmd As OleDb.OleDbCommand
        Dim oDR As OleDb.OleDbDataReader
        Dim oItem As PDSAListItemNumeric
        Dim strSQL As String
        Dim strConn As String


        strConn = ConnectStringBuild()


        ' List Box-оос Primary Key-г авах
        oItem = CType(lstProducts.SelectedItem, PDSAListItemNumeric)


        strSQL = "SELECT ProductID, ProductName, "
        strSQL &= " SupplierID, CategoryID, "
        strSQL &= " QuantityPerUnit, UnitPrice, "
        strSQL &= " UnitsInStock, UnitsOnOrder, "
        strSQL &= " ReorderLevel, Discontinued "
        strSQL &= " FROM Products "
        strSQL &= " WHERE ProductID = " & oItem.ID


        Try
              oCmd = New OleDb.OleDbCommand()
              With oCmd
                   .Connection = New OleDb.OleDbConnection(strConn)



                                             28
Visual Basic.NET

                   .Connection.Open()
                   .CommandText = strSQL
                   oDR = .ExecuteReader(CommandBehavior.SequentialAccess)
              End With


              If oDR.Read() Then
                   With oDR
                        txtID.Text = .Item("ProductID").ToString()
                        txtName.Text = .Item("ProductName").ToString()
                        strID = .Item("SupplierID").ToString()
                       Call FindItem(cboSupplier, strID)
                        strID = .Item("CategoryID").ToString()
                       Call FindItem(cboCategory, strID)
                        txtQty.Text = .Item("QuantityPerUnit").ToString()
                        txtPrice.Text = .Item("UnitPrice").ToString()
                        txtInStock.Text = .Item("UnitsInStock").ToString()
                        txtOnOrder.Text = .Item("UnitsOnOrder").ToString()
                        txtReorder.Text = .Item("ReorderLevel").ToString()
                        chkDisc.Checked = CType(.Item("Discontinued"), Boolean)
                   End With
              End If
              oDR.Close()
              oCmd.Connection.Close()


        Catch oException As Exception
              MessageBox.Show(oException.Message)


        End Try
   End Sub
Дараах FindItem функц нь параметрээрдамжиж ирсэн ID-г combo box-оос хайна. Хэрэв олдсон бол Combo
box-ын          тухайн        байрлал        нь         сонгогдон          харагдах         болно.



   Private Sub FindItem(ByVal cboCombo As ComboBox, ByVal strID As String)
        Dim intLoop As Integer
        Dim boolFound As Boolean



                                               29
Visual Basic.NET

         Dim oItem As PDSAListItemNumeric


         oItem = New PDSAListItemNumeric()
         For intLoop = 0 To cboCombo.Items.Count - 1
               oItem = CType(cboCombo.Items(intLoop), PDSAListItemNumeric)
               If oItem.ID = CInt(strID) Then
                    cboCombo.SelectedIndex = intLoop
                    boolFound = True
                    Exit For
               End If
         Next
         If Not boolFound Then
               cboCombo.SelectedIndex = -1
         End If
     End Sub


Єгєгдєл          бэхлэх          |       дээшээ          |         DataSet         Объект
нvvр хуудас

ADO.NET DataTable ба DataSet (Visual Basic .NET)

 o   DataTable ба DataSet
 o   DataTable объектыг хэрэглэх
 o   DataSet объектыг хэрэглэх
 o   Єєгєгдєлнэмэх, єєрчлєх, устгах




DataTable ба DataSet
DataSet объект нь санах ой дах єгєгдлийн бааз билээ. Энэ объект нь SQL мэдэгдлээр дамжин єгєгдєлтэй
харьцаж             байдаг           DataTable            объектуудыг           агуулдаг.
DataSet нь єгєгдлийг XML-ээр хадгалдаг. Мєн бvдvvвч мэдээллийг агуулж, DataTable-vvдийн хоорондох
relationship-ийг хадгалж байдаг. Та єгєгдлийг нэмэх, засварлах, устгах vйлдлvvдийг DataSet-ээр хийж
чадна.
Энэ хичээлээр DataTable. DataSet объектуудыг ашиглан єгєгдєл оруулах формхийхийг vзье.




                                                30
Visual Basic.NET




Зураг 1.
Бидний жишээнд vзэх формын Load vзэгдлийн процедурт дараахкодыг бичиж єгнє.
    Private Sub frmProduct_Load( ByVal sender As System.Object, ByVal e As
System.EventArgs) _
    Handles MyBase.Load
           ' Suppliers (Нєєц) combo box-ийг дvvргэх
           SupplierLoad()
           ' Categories (Категори) combo box-ийг дvvргэх
           CategoryLoad()


           ' DataSet-ийг vvсгэх
           DataSetCreate()
           ' Products (бvтээгдэхvvн)–ийн List Box-ийг дvvргэх
           ListLoad()
    End Sub



DataTable объектыг хэрэглэх
Зураг1 дээрх Suppliers, Categories combo box-уудыг DataTable объект ашиглан дvvргэе.
    Private Sub SupplierLoad()
           Dim oAdapter As OleDb.OleDbDataAdapter
           Dim oTable As DataTable = New DataTable()
           Dim oItem As PDSAListItemNumeric
           Dim strSQL As String
           Dim strConn As String
           Dim intLoop As Integer



                                                  31
Visual Basic.NET


         strConn = ConnectStringBuild()


         strSQL = "SELECT SupplierID, CompanyName "
         strSQL &= "FROM Suppliers"


         Try
               oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn)
               oAdapter.Fill(oTable)


               For intLoop = 0 To oTable.Rows.Count - 1
                   oItem = New PDSAListItemNumeric()
                   With oTable.Rows(intLoop)
                        oItem.Value = .Item("CompanyName").ToString()
                        oItem.ID = CInt(.Item("SupplierID"))
                   End With


                   cboSupplier.Items.Add(oItem)
               Next


         Catch oExcept As Exception
               MessageBox.Show(oExcept.Message)


         End Try
   End Sub
Та combo box-ийг дvvргэхийн тулд OleDbDataAdapter-ийг ашиглан DataTable объектыг єгєгдлєєр
дvvргэнэ. Бидний мэдэх PDSAListItemNumeric классыг ашиглан Suppliers хvснэгтээс Combo box
контролыг primare key, дэлгэцэнд харагдах утгаар дvvргэнэ.
Дараах функц нь єгєгдлєєр хангагчтай холбогдох тэмдэгт мєр буцаана. Та сvлжээ ашиглан SQL Server-тэй
холбогдох бол дараахфункцыг єєрчлєн бичээрэй.
   Private Function ConnectStringBuild() As String
         Dim strConn As String


         strConn = "Provider=sqloledb;"
         strConn &= "Data Source=(local);"
         strConn &= "Initial Catalog=Northwind;"



                                                32
Visual Basic.NET

         strConn &= "User ID=sa"


         Return strConn
   End Function


Хэрэв танд SQL Server байхгvй бол Microsoft Access-ийн NorthWind жишээ єгєгдлийн баазыг ашиглаж
болно. Дараах байдлаартодорхойлох ба та файлынхаазамыг засаж бичээрэй.
   Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:AccessNorthwind.mdb
Categories combo box-ыг дээрхтэйтєстэйбайдлаард vvргэнэ.

 1. SupplierLoad процедурын хуулбарыг vvсгэн, нэрийг нь CategoryLoad гэж єєрчилнє.
 2. SELECT мэдэгдэлд байгаа хvснэгт болон багануудын нэрийг солино. Хvснэгтийн нэрийг Categories,
    багануудын нэрийг
 3. CategoryID, CategoryName гэж єєрчилнє.
 4. PDSAListItemNumeric классаасавч буй багануудын нэрийг єєрчилнє
 5. cboSupplier combo box–ыг cboCategory combo box болгон єєрчилнє.



DataSet объектыг хэрэглэх
DataTable объект нь дан хvснэгтийн єгєгдєл байдаг ба combo box болон list box-уудыг ачаалахадголчлон
хэрэглэгддэг. DataSet нэг болон тvvнээс их DataTable-ийг багтаадаг ба єгєгдєл оруулах формд DataSet
vvсгэснээр List box-ыг єгєгдлєєрдvvргэх, нэмэх, засах, устгах vйлдлvvдийг гvйцэтгэхэд туслана.
Юуны ємнє формд хэрэглэгдэх глобал хувьсагч зарлая. Private хувьсагч нь зєвхєн формд хэрэглэгдэнэ
гэдгийг тодорхойлдог.
   Public Class frmProduct
         Inherits System.Windows.Forms.Form


         Private moDS As DataSet
Дараах DataSet vvсгэх процедурыг бичье.
   Private Sub DataSetCreate()
         Dim oAdapter As OleDb.OleDbDataAdapter
         Dim strSQL As String
         Dim strConn As String


         ' Холболтын тэмдэгт мєрийг авах
         strConn = ConnectStringBuild()




                                                33
Visual Basic.NET

         ' SQL тэмдэгт мєр vvсгэх
         strSQL = "SELECT * FROM Products"


         moDS = New DataSet()
         Try
               ' Шинэ Data Adapter vvсгэх
               oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn)
               ' DataSet-ийг єгєгдсєн хvснэгтээр Adapter-аас дvvргэх
               oAdapter.Fill(moDS, "Products")
               ' Primary Key vvсгэх
               With moDS.Tables("Products")
                     .PrimaryKey = New DataColumn() {.Columns("ProductID")}
               End With


         Catch oExcept As Exception
               MessageBox.Show(oExcept.Message)


         End Try
    End Sub
Дээрх код бидний ємнє vvсгэсэн DataTable-ийг vvсгэхтэй тєстэй. Энд шинэ “Products” DataTable-ийг
DataSet-д vvсгэж байна. Та энэ нэрийг ашиглан DataSet-ийн Tables collection дах хvснэгттэй холбогдоно.
Жишээ нь: oDS.Tables(“Products”) нь DataAdapter-аардvvргэгдсэн DataTable объект буцаадаг.
Хэрэв та DataSet-ийн DataTable-ээс хайлт хийх бол DataTable-д PrimaryKey (тvлхvvр талбар) баганыг
тодорхойлож єгєх хэрэгтэй. PrimaryKey–д нэг болон хэд хэдэн багана тодорхойлж єгч болно. Иймд
PrimaryKey нь DataColumn-ын массив тєрєлтэй. Бидний жишээнд нэг л багана тодорхойлох учир нэг
урттай DataColumn массивыг PrimaryKey-д оноож єгнє.



ListBox-ыг DataSet-ээс дvvргэх нь
    Private Sub ListLoad()
         Dim oItem As PDSAListItemNumeric
         Dim oRow As DataRow


         LstProducts.Items.Clear()
         ' DataRow болгоныг давталтаар унших
         For Each oRow In moDS.Tables("Products").Rows


               ' Шинэ PrimaryKey болон тайлбарыг агуулах Item vvсгэх


                                                 34
Visual Basic.NET

             oItem = New PDSAListItemNumeric()
             With oItem
                   .ID = CInt(oRow.Item("ProductID"))
                   .Value = oRow.Item("ProductName").ToString()
             End With


             ' Хvснэгтэнд шинэ мєр нэмэхэд тухайн талбарын утга нь автоматаар
нэмэгдэнэ.
            moDS.Tables("Products").Columns("ProductID").AutoIncrement = True


             ' Item-ыг list box-руу нэмэх
             lstProducts.Items.Add(oItem)
        Next


        lstProducts.SetSelected(0, True)
   End Sub



DataSet-ээс тодорхой мєрийг хайх
Бvтээгдэхvvний жагсаалт дээр товшилт хийхэд тухайн бvтээгдэхvvний талаар дэлгэрэнгvй мэдээллийг
формдээрх контролуудадгаргаж суръя. Эхлээдта List box дээр товшилт хийхэд биелэх кодыг бичье.
Формын дизайн горим vед давхар товшилт хийн SelectedIndexChanged vзэгдлийн процедурыг vvсгэнэ.
Тэгээд дараахкодыг бичнэ.
    Private Sub lstProducts_SelectedIndexChanged( ByVal sender As Object,
ByVal e As _
System.EventArgs) Handles lstProducts.SelectedIndexChanged
        FormShow()
   End Sub
Дараах FormShow процедур нь DataSet-ээс тодорхой мєрийг хайн, тэр мєрєєс форм дээрх контролуудыг
мэдээллээрдvvргэнэ.
   Private Sub FormShow()
        Dim oDR As DataRow
        Dim oItem As PDSAListItemNumeric
        Dim strID As String


        ' List Box-оос Primary Key-г авах
        oItem = CType(lstProducts.SelectedItem, PDSAListItemNumeric)




                                              35
Visual Basic.NET

        ' DataSet-ээс мєр хайх
        With moDS.Tables("Products").Rows
             oDR = .Find(oItem.ID)
        End With


        ' Өгєгдлийг дэлгэцэнд гаргах
        txtID.Text = oDR("ProductID").ToString()
        txtName.Text = oDR("ProductName").ToString()
        strID = oDR("SupplierID").ToString()
        Call FindItem(cboSupplier, strID)
        strID = oDR("CategoryID").ToString()
        Call FindItem(cboCategory, strID)
        txtQty.Text = oDR("QuantityPerUnit").ToString()
        txtPrice.Text = oDR("UnitPrice").ToString()
        txtInStock.Text = oDR("UnitsInStock").ToString()
        txtOnOrder.Text = oDR("UnitsOnOrder").ToString()
        txtReorder.Text = oDR("ReorderLevel").ToString()
        chkDisc.Checked = CType(oDR("Discontinued"). Boolean)
   End Sub


   Private Sub FindItem(ByVal cboCombo As ComboBox, _
      ByVal strID As String)
         Dim intLoop As Integer
         Dim boolFound As Boolean
         Dim oItem As PDSAListItemNumeric


         oItem = New PDSAListItemNumeric()
         For intLoop = 0 To cboCombo.Items.Count - 1
              oItem = CType(cboCombo.Items(intLoop), PDSAListItemNumeric)
              If oItem.ID = CInt(strID) Then
                   cboCombo.SelectedIndex = intLoop
                   boolFound = True
                   Exit For
              End If
         Next



                                        36
Visual Basic.NET

          If Not boolFound Then
                cboCombo.SelectedIndex = -1
          End If
     End Sub
List box нь зєвхєн Object єгєгдлийн тєрєлтэй байдаг учир Ctype функцыг хэрэглэн PDSAListItemNumeric
тєрєл рvv хєрвvvлнэ. Та энэ хєрвvvлэгдсэн тєрлийн ID property-гоос primary key-г авна. Find method нь ID-
д харгалзах дан DataRow объектыг буцаадаг. DataRow объектоос багана болгоны утгыг авч контролыг
єгєгдлєєрдvvргэж байна.



DataSet объектыг ашиглан єгєгдлийг єєрчлєх
 o   DataSet-д мєр нэмэх
 o   DataSet-ийн мєрvvдийг шинэчлэнхадгалах
 o   DataSet дэх мєрийг устгах




DataSet-д мєр нэмэх
Бидний хийж буй формын Add товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье.
       Private Sub           btnAdd_Click(ByVal          sender     As    Object,      ByVal     e    As
System.EventArgs) _
     Handles btnAdd.Click
         DataAdd()
     End Sub
Та хvснэгт рvv мєр нэмэх vйлдлийг OleDbCommand объектоос INSERT мэдэгдэл, мєн DataSet объектыг
ашиглан хийнэ. DataSet нь єгєгдлийн баазтай vл холбогдсон учир та эхлээд DataSet дээр єгєгдєл нэмнэ.
Дараань баазтайхолболт хийн, OleDbCommandBuilder объектыг INSERT мэдэгдлийг байгуулна.
     Private Sub DataAdd()
         Dim oAdapter As OleDb.OleDbDataAdapter
         Dim oBuild As OleDb.OleDbCommandBuilder
         Dim oDR As DataRow
         Dim strSQL As String
         Dim strConn As String


         ' DataSet-ээс DataRow объектыг шинээр vvсгэнэ
         oDR = moDS.Tables("Products").NewRow()
         oDR.BeginEdit()



                                                   37
Visual Basic.NET


        ' Шинэ єгєгдлийг мєр лvv хийх
        oDR("ProductName") = txtName.Text
                     oDR("SupplierID")         =   CType(cboSupplier.SelectedItem,
PDSAListItemNumeric).ID
                     oDR("CategoryID")         =   CType(cboCategory.SelectedItem,
PDSAListItemNumeric).ID
        oDR("QuantityPerUnit") = txtQty.Text
        oDR("UnitPrice") = CDec(txtPrice.Text)
        oDR("UnitsInStock") = CShort(txtInStock.Text)
        oDR("UnitsOnOrder") = CShort(txtOnOrder.Text)
        oDR("ReorderLevel") = CShort(txtReorder.Text)
        oDR("Discontinued") = CBool(chkDisc.Checked)


        ' Нэмэх vйлдэл дууссаныг мэдэгдэх
        oDR.EndEdit()
        ' DataRow-ийг DataSet рvv нэмэх
        moDS.Tables("Products").Rows.Add(oDR)


        Try
              ' Холболтын тэмдэгт мєрийг авах
              strConn = ConnectStringBuild()


              ' SQL тэмдэгт мєр
              strSQL = "SELECT * FROM Products "
              ' DataAdapter-ийг шинээр vvсгэх
              oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn)
              ' Adapter-аас CommandBuild vvсгэх
              ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг
              oBuild = New OleDb.OleDbCommandBuilder(oAdapter)


              ' Insert Command объектыг авах
              oAdapter.InsertCommand = oBuild.GetInsertCommand()


              ' INSERT мэдэгдэл Adapter-аар дамжин хэрэгжинэ.
              oAdapter.Update(moDS, "Products")



                                        38
Visual Basic.NET

              ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг
хэлнэ.
             moDS.AcceptChanges()
             ' Холболтыг хаах
             oAdapter.InsertCommand.Connection.Close()


             ' DataSet-ийг дахин vvсгэх
             DataSetCreate()
             ' List box- ийг дахин vvсгэх
             ListLoad()


         Catch oException As Exception
             MessageBox.Show(oException.Message)


         End Try
   End Sub
Өгєгдлийн бааз руу мєр нэмэхийн тулд эхлээд шинэ мєрийг DataSet-ийн DataTable-д нэмнэ. Шинээр
нэмэгдсэн мєрєнд BeginEdit method-оор багануудад єгєгдлvvдийг байрлуулах буюу єгєгдлийг єєрчлєх
боломжтой болно. EndEdit method-оор баганануудыг Datarow рvv хадгална. Add method-ын
тусламжтайгааршинэ DataRow-ыг DataTable рvv нэмнэ.
DataAdapter-аас Builder объектыг OledbCommandBuilder байгуулагчаар дамжуулан vvсгэж байна.
Ингэснээр GetInsertCommand method-ыг ашиглан INSERT мэдэгдлийг CommandBuilder объектоос авч
чадна. Энэ INSERT мэдэгдэлнь дарааххэлбэртэй байдаг:
    INSERT INTO "Products"( "ProductName" , "SupplierID" , "CategoryID" ,
"QuantityPerUnit" ,
     "UnitPrice"      ,     "UnitsInStock"      ,   "UnitsOnOrder"     ,   "ReorderLevel"       ,
"Discontinued" )
   VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? )
Adapter-ын Update method-ын тусламжтайгаарєгєгдєл нэмэгдэх буюу INSERT мэдэгдэлхэрэгжинэ.



DataSet-ийн мєрvvдийг шинэчлэн хадгалах
Бидний хийж буй формын Update товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье.
      Private Sub btnUpdate_Click(ByVal               sender    As   Object,    ByVal       e   As
System.EventArgs) _
   Handles btnUpdate.Click
         DataUpdate()
   End Sub




                                              39
Visual Basic.NET

Та DataSet-ийн мєрvvдийг шинэчлэн хадгалахын тулд тухай мєрийг хайж олоод, баганууд дах єгєгдлийг
єєрчлєн, DataAdapter ба CommandBuilder объектыг байгуулан, UPDATE мэдэгдлийг ашиглан єгєгдлийг
хадгалах болно.
   Private Sub DataUpdate()
        Dim oAdapter As OleDb.OleDbDataAdapter
        Dim oBuild As OleDb.OleDbCommandBuilder
        Dim oDR As DataRow
        Dim strSQL As String
        Dim intID As Integer
        Dim strConn As String


        ' List Box-оос Primary Key-г авах
        intID = CType(lstProducts.SelectedItem, PDSAListItemNumeric).ID


        ' Шинэчлэх мєрийг хайх
        oDR = moDS.Tables("Products").Rows.Find(intID)


        ' Засварлаж эхлэх
        oDR.BeginEdit()


        ' Мєр лvv шинэ єгєгдлийг нэмэх
        oDR("ProductName") = txtName.Text
                     oDR("SupplierID")              =    CType(cboSupplier.SelectedItem,
PDSAListItemNumeric).ID
                     oDR("CategoryID")              =    CType(cboCategory.SelectedItem,
PDSAListItemNumeric).ID
        oDR("QuantityPerUnit") = txtQty.Text
        oDR("UnitPrice") = CDec(txtPrice.Text)
        oDR("UnitsInStock") = CShort(txtInStock.Text)
        oDR("UnitsOnOrder") = CShort(txtOnOrder.Text)
        oDR("ReorderLevel") = CShort(txtReorder.Text)
        oDR("Discontinued") = CBool(chkDisc.Checked)


        ' Засварлалтыг дуусгах
        oDR.EndEdit()


        Try


                                               40
Visual Basic.NET

             ' Холболтын тэмдэгт мєрийг авах
             strConn = ConnectStringBuild()
             ' SQL тэмдэгт мєр
             strSQL = "SELECT * FROM Products "
             ' DataAdapter-ийг шинээр vvсгэх
             oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn)
             ' Adapter-аас CommandBuild vvсгэх
             ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг
             oBuild = New OleDb.OleDbCommandBuilder(oAdapter)


             ' Update Command объектыг авах
             oAdapter.UpdateCommand = oBuild.GetUpdateCommand()


             ' UPDATE мэдэгдэл Adapter-аар дамжин хэрэгжинэ.
             oAdapter.Update(moDS, "Products")
              ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг
хэлнэ
             moDS.AcceptChanges()
             ' Холболтыг хаах
             oAdapter.UpdateCommand.Connection.Close()


             ' List box- ийг дахин vvсгэх
             ListLoad()


        Catch oException As Exception
             MessageBox.Show(oException.Message)


        End Try
   End Sub



DataSet дэх мєрийг устгах
Бидний хийж буй формын Delete товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье.
      Private Sub btnDelete_Click(ByVal               sender    As    Object,    ByVal   e   As
System.EventArgs) _
   Handles btnDelete.Click
        DataDelete()


                                               41
Visual Basic.NET

   End Sub


   Private Sub DataDelete()
        Dim oAdapter As OleDb.OleDbDataAdapter
        Dim oBuild As OleDb.OleDbCommandBuilder
        Dim oDR As DataRow
        Dim strSQL As String
        Dim strConn As String
        Dim intID As Integer


        ' Холболтын тэмдэгт мєрийг авах
        strConn = ConnectStringBuild()


        ' List Box-оос Primary Key-г авах
        intID = CType(lstProducts.SelectedItem, PDSAListItemNumeric).ID


        ' Устгах мєрийг хайх
        oDR = moDS.Tables("Products").Rows.Find(intID)
        ' DataRow-ийг устгасан гэж тэмдэглэх
        oDR.Delete()


        Try
              ' SQL тэмдэгт мєр
              strSQL = "SELECT * FROM Products "
              ' DataAdapter-ийг шинээр vvсгэх
              oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn)
              ' Adapter-аас CommandBuild vvсгэх
              ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг
              oBuild = New OleDb.OleDbCommandBuilder(oAdapter)


              ' Delete Command объектыг авах
              oAdapter.DeleteCommand = oBuild.GetDeleteCommand()


              ' DELETE мэдэгдэл Adapter-аар дамжин хэрэгжинэ.
               oAdapter.Update(moDS, "Products")



                                         42
Visual Basic.NET

             ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг
хэлнэ
             moDS.AcceptChanges()
             ' Холболтыг хаах
             oA




                                       43

Vb.net mon1

  • 1.
    Visual Basic.NET Visual Basic.NET Visual Basic .NET-ын ємнєх хувилбаруудаас ялгарах онцлог, нэмэгдсэн шинэлэг ойлголтуудыг энэхvv хичээлээс уншиж мэдэх болно. Visual Basic .NET нь шинэчлэгдэн чадварлаг Объект Хандалтат Программчлалын (Object Oriented) хэл болсон. Мєн вэб хєгжvvлэхэд зориулсан Web Form-ууд нь броаузер-суурьтай Web Appliction-ыг хялбар, хурдан хийх боломж олгоно. Ингээд бусад єєрчлєлт, шинэчлэлийн талаартанилцуулъя. Массив Option base мэдэгдэл хасагдсан. Єєр хэлбэл бидний мэдэх VB6-д массивийн эхлэл 1-ээс байсан бол одоо VB.NET-д массивийн эхлэл 0-ээс эхлэдэг болсон. Жишээ нь: Dim astrValue(20) as String Дээрх код нь 21 эльмент бvхий тэмдэгт мєр тєрлийн массив vvсгэнэ. Тэмдэгт мєр л vv хандахнь Тэмдэгт мєрийг тодорхой урттай зарлахыг vл зєвшєєрнє.Тэмдэгт мєр нь єєрийн гэсэн шинж чанараар хангагдсан. Жишээ нь: Dim strName As String StrName = “ “.PadRight(30) StrName хувьсагчийг 30-н хоосон зайгаардvvргэж байна. Б vхэл тоон тєрлvvд Зарим бvхэл тоон тєрлvvдийн авах утгын хэмжээ єєрчлєгдсєн. Жишээлбэл Integer тєрєл -32,678 -ээс 32,767 хvртэл утга авдаг байсан бол одоо VB.NET-д -2,147,483,648 -аас 2,147,483,647 хvртэл утга авна. Decimal тєрєл Currency тєрєл хасагдан, оронд нь Decimal тоон тєрєл нэмэгдсэн. Энэ тєрєл нь бусад хэлнvvд болон єгєгдлийн баазтай бvрэн зохицох чадвартай ба 0-ээс 28 хvртэл оронг багтааж чадна. є.х Бvхэл ба бутархай оронгийн нийт тоо нь 29-аасихгvй байна. Char тєрєл Char тєрєл нь 2 байт хэмжээтэй болсон ба UNICODE тэмдэгтvvдийг агуулж чадах болсон. Object тєрєл Variant тєрєл Object тєрлєєрсолигдсон. Object тєрєл нь єєр нэмэлт бусадєгєгдлийн тєрлийг хадгалж чадна. DefType DefType-г тодорхойлсноор хувьсагч ямар vсгээр эхэлснээс шалтгаалан тухайн хувьсагчийн тєрлийг тодорхойлж болдог байсан билээ. Тэгвэл одоо vvнийг хэрэглэх боломжгvй болсон ба хувьсагчийг заавал зарлах шаардлагатай. Boolean vйлдэл “And”, “Or”, “XOR” vйлдлvvд нь Boolean болон бит vйлдлvvдэд хэрэглэгддэг байсан. Одоо шинэ BitAnd, BitOr, BitXOR, BitNot гэсэн vйлдлvvдийг хэрэглэх боломжтой. Эдгээр vйлдлvvдийг Boolean болон тоон тєрлvvдэдхэрэглэж болно. Vйлдэлхялбарчлах VB.NET-д AndAlso, OrElse хоёр шинэ логик vйлдэл нэмэгдсэн. Хэрэв та олон логик vйлдэл ашиглаж байгаа бол AndAlso, OrElse нь илvv vйлдлээс зайлсхийх боломж олгоно. OrElse логик vйлдлийг ашигласан vед эхнийх нь vнэн байх юм бол илэрхийлэл шууд vнэх гэсэн утга буцаана. AndAlso логик vйлдлийг ашигласан vед эхнийх нь худал бол илэрхийлэл шууд худал гэсэн утга буцаана. Жишээ нь: Хэрэв доорх кодыг ашиглавал FlagTestFalse() ба FlagTestTrue() функцvvд нь 2-уул дуудагдана. 1
  • 2.
    Visual Basic.NET If FlagTestFalse() And FlagTestTrue() Then MessageBox.Show(" 'Энэ нєхцєл биелэхгvй") End If Private Function FlagTestFalse() As Boolean MessageBox.Show("FlagTestFalse()") Return False End Function Private Function FlagTestTrue() As Boolean … Return True End Function Хэрэв And vйлдлийн оронд AndAlso vйлдлийг ашиглавал FlagTestTrue() функц нь дуудагдахгvй. If FlagTestFalse() AndAlso FlagTestTrue() Then MessageBox.Show(" 'Энэ нєхцєл биелэхгvй") End If Объектын vндсэн property Объектын vндсэн property vгvй болсон. Жишээ нь: VB6-д TextBox1=”Text1” гэж оноохыг зєвшєєрдєг байсан бол VB.NET-д заавал TextBox1.Text=”Text1” гэж бичихийг шаардана. Классын шинж чанарыг (property) тодорхойлох VB-ийн ємнєх хувилбаруудад классын шинж чанарыг тодорхойлохдоо Property Get/ Set/ Let тvлхvvр vгvvдийг хэрэглэдэг байсан билээ. VB.NET-д нэг нэрэн дор Get, Set-ийг хэрэглэнэ. Жишээлбэл: Private mstrFirstName As String Private mintCode As Integer = -1 Property FirstName() As String Get Return mstrFirstName End Get Set(ByVal Value As String) mstrFirstName = Value End Set End Property 2
  • 3.
    Visual Basic.NET Property Code() As Integer Get Code = mintCode End Get Set(ByVal Value As Integer) If Value = 0 Or Value = 1 Then mintCode = Value Else mintCode = -1 End If End Set End Property Хэрэглэгчийн тодорхойлсонтєрл vvд Type…End Type тvлхvvр vгийг ашиглан хэрэглэгчийн тодорхойлсон тєрлvvдийг vvсгэдэг байсан бол VB.NET-д Structure…End Structure тvлхvvр vгийг ашиглана. Structure Customer Public CustID As Integer Dim CustomerName As String Private TotalSalesAmount As Decimal End Structure Хувьсагч тодорхойлоходгарсан єєрчлєлт Dim intLoop, intValue as Integer VB6-д intLoop хувьсагч нь Variant тєрєл авах болно. Харин VB.NET-д intLoop, intValue хувьсагчууд нь 2- уул Integer тєрєл байх юм. Объект vvсгэх Объект vvсгэхдээдараахаргуудаар vvсгэж болно. a. Dim oCust As New Customer() b. Dim oCust As Customer = New Customer() c. Dim oCust As Customer d. oCust = New Customer() Method-оор солигдсонфункц vvд Функц Єєрчлєлт Circle() System.Drawing.DrawEllipse Line() System.Drawing.DrawLine 3
  • 4.
    Visual Basic.NET Atn() System.Math.Atan Atn() System.Math.Atan Sgn() System.Math.Sign Sqr() System.Math.Sqrt Rnd() System.Math.Rnd Round() System.Math.Round IsNull() IsDBNull() IsObject() IsReference() VarType() System.Object.GetType() MsgBox MessageBox.Show() LSet System.String.PadRight RSet System.String.PadLeft DoEvents System.WinForms.Application.DoEvents Зарим єєрчлєлтvvд Хэлэнд гарсан бусадєєрчлєлтvvдээсдурдахад:  Pset, Scale-ууд хасагдсан  Empty, Null-ууд хасагдсан  IsEmpty() нь хасагдсан  Илэрхийлэлд Null утга оноовол алдааєгєх болно  Тогтмолууд нь ControlChars классд багтах болсон  Функцын дараа $ тэмдэг хэрэглэх шаардлагагvй  Let a=b нь ажиллахгvй  Class_Initialize, Class_Terminate–ууд нь хасагдсан  VarPtr, VarPtrArray, VarPtrStringArray, ObjPtr, StrPtr–ууд нь хасагдсан WinForm-ийн єєрчлєлтvvд Visual Basic.NET-ийн формуудадмаш их єєрчлєлт орсон.  Бvх контролын TabIndex-ийг 0 оноож болно 4
  • 5.
    Visual Basic.NET  Zorder нь runtime vед контролуудын байрлалыг єєрчилдєг  Шинэ LinkLabel контрол нь гиперлинк хийхэд зориулагдсан  GroupBox контрол Frame контролоор солигдсон  Шинэ Splitter контролыг ашиглан Explorer-like интерфайс vvсгэж чадна  Drag & Drop бvрэлдэхvvнд ихээхэн єєрчлєлт орсон  DDE (Dinamic Data Exchange)-г дэмждэггvй  Time контролын Interval-ийг 0 болгохыг зєвшєєрдєггvй  OLE контролыг дэмжддэггvй  Shape контрол байхгvй  Line контрол байхгvй  Form.PrintForm method хасагдсан  Clipboard ажиллагааих єєрчлєдсєн. Одоо System.WinForms.Clipboard ашиглана.  Формын Name property-г утгыг авах боломжгvй  Формыг Show хийхийн тулд формтєрлийн хувьсагч зарлах ёстой  Form болон контролын координатуудыг Twips хэмждэг байсан бол .NET-д Pixel-ээр хэмждэг болсон.  Єгєгдлийг DAO болон RDO ашиглан боловсруулж чадахгvй. Зєвхєн DAO ашиглагдсан прожекттой vед хэрлэглэх боломжтой. Debuging Debug.Print нь Debug.Write болон Debug.WriteLine-уудаарсолигдсон. Єгєгдлийн баазын хэрэгсэлvvд DataView цонх хасагдан оронд нь Server Explorer нэмэгдсэн. Бvх єгєгдлийн баазын хэрэгсэлvvд нь SQL Server 2000 –тай ажиллахадзориулагдсан. Web Application-ууд Visual Basic.NET дээр вэб хэрэглээний программ байгуулах ажиллагаа эрс єєрчлєгдсєн. Хэрэв танд VB6 дээрвэб хийх зарим техникийг хэрэглэсэн прожект бий бол тэдгээрийг дахин бичих хэрэгтэй болно.  IIS Application-ууд дэмжигддэггvй харин оронд нь ASP.NET болон WebForm-уудыг хэрэглэх шаардлагатай.  DHTML Application-ууд мєн дэмжигддэггvй  ActiveX Document-ууд мєн дэмжигддэггvй Visual Studio .NET ба IDE | дээшээ | DataTable класс | нvvр хуудас DataTable класс (Visual Basic .NET) o DataGrid–ийг єгєгдлєєрдvvргэж сурах o DataTable болон DataRow классын талаар vндсэн мэдлэг олж авах 5
  • 6.
    Visual Basic.NET DataTable класс DataTableкласс нь єгєгдлийн баазын хvснэгттэй тєстэй .NET-ийн класс юм. Энэ нь мєрvvдээс тогтох ба мєр болгонд баганы олонлог багтсан байдаг. Багана болгон нэртэй байх ба мєн єгєгдлийн тєрєл, аттрибут (жишээ нь ReadOnly –зєвхєн уншигдах), DefaultValue-тай байна. DataTable класс нь DataRow oбъектуудаас тогтох ба DataRow объект болгон нь DataColumn объекуудаас бvрддэг. DataTable-ийг хэрэглэх нь DataTable нь олон тооны мєртэй мєр болгон нь олон утга агуулах тийм єгєгдлийг хадгалах, боловсруулах vед хэрэглэгдэнэ. Та DataTable-ээс єєр єгєгдєлтэй харьцах механизм (user-defined массив, классын collection, ADO Recordset) хэрэглэж болох боловч DataTable хэрэглэхэдилvv хялбарбайдаг. DataTable vvсгэх Юуны ємнє DataTable тєрлийн хувьсагчийг глобалаар (бvх процедуруудаасгадна) зарлах хэрэгтэй. Public Class frmProductsSimple Inherits System.Windows.Forms.Form Private mdt As DataTable Одоо DataTable-ийг хэрхэн єгєгдлєєр дvvргэх талаар жишээ vзье. Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnLOad.Click Dim dr As DataRow Dim intLoop As Integer Me.Cursor = Cursors.WaitCursor ' Шинэ DataTable объект vvсгэх mdt = New DataTable() ' DataTable-д баганууд vvсгэх mdt.Columns.Add("ProductID") mdt.Columns.Add("ProductName") mdt.Columns.Add("UnitPrice") mdt.Columns.Add("UnitsInStock") ' DataTable–г єгєгдлєєр дvvргэх For intLoop = 1 To 10 6
  • 7.
    Visual Basic.NET ' Шинэ мєр vvсгэх dr = mdt.NewRow ' Шинэ мєрийн багануудад єгєгдєл нэмэх dr("ProductID") = intLoop dr("ProductName") = "Product " & intLoop.ToString() dr("UnitPrice") = intLoop * 10 dr("UnitsInStock") = intLoop * 20 ' Шинэ мєрийг DataTable-рvv нэмэх mdt.Rows.Add(dr) Next ' Grid-ийн багануудыг AutoSize хийх grdProducts.PreferredColumnWidth = grdProducts.AutoColumnSize ' Grid-ийг єгєгдлєєр дvvргэх grdProducts.DataSource = mdt Me.Cursor = Cursors.Default End Sub Та дээрх процедурыг ашигласнаар бvтээгдэхvvнтэй холбоотой єгєгдлийг загвар байдлаар vvсгэх болно. 10-н удаа давталт хийх ба давталт болгонд шинэ DataRow объект vvсэх болно. DataRow объект нь DataTable-д тодорхойлсон багануудын тодорхойлолтуудтай хамт байгуулагддаг. DataRow-д буй багануудын нэг болох ProductID багана руу давталтын тоологч (intLoop)-ийг, “Product 1”, “Product 2”, гм- ийг ProductName багана руу гэх мэтээр дvvргэлээ. Эцэст нь DataTable-ийн Rows collection-ний Add method-оор DataRow oбъектыг DataTable рvv нэмсэн байна. DataRow-тэй ажиллах Grid-ийг єгєгдлєєр дvvргэсний дараа нэг мєр сонгож єгєгдлєє дэлгэцэнд vзvvлэх хэрэгцээ гардаг. vvнийг хийхийн тулд та хэрэглэгчийн товшилт (click) хийсэн мєрийн дугаарыг мэдсэн байх хэрэгтэй. Хэрэв та мєрийн дугаараа мэдэж байгаа тохиолдолд DataTable-ийн Rows collection-ийг ашиглах тухайн мєрийг DataRow-рvv дамжуулж чадна. Private Sub grdProducts_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles grdProducts.Click Dim dr As DataRow Dim intRow As Integer ' Идэвхтэй мєрийн дугаар авах 7
  • 8.
    Visual Basic.NET intRow = grdProducts.CurrentCell.RowNumber ' DataRow-ийг DataTable-ээс авах dr = mdt.Rows(intRow) ‘TextBox контролуудыг єгєгдлєєр дvvргэх txtProductID.Text = dr("ProductID") txtProductName.Text = dr("ProductName") txtUnitPrice.Text = dr("UnitPrice") txtUnitsInStock.Text = dr("UnitsInStock") End Sub ADO.NET o ADO.NET классуудыг танилцуулга o ADO.NET-г ADO-той харьцуулахнь ADO.NET классуудыг танилцуулга ADO.NET нь санах ойд єгєгдлийн олонлогуудыг байгуулахыг зєвшєєрдєг объектын загвар юм. Та єгєгдлийн олонлогуудын єгєгдлийг кодоос, текст файлаас, exchange server-ээс, єгєгдлийн баазын системээсавч болно. ADO.NET-д сурах зайлшгvй хэрэгтэй хэд хэдэн класс бий. Танд энэ бvх классуудын товч тайлбарлая. DataSet - Энэ классыг санах ой дахь єгєгдлийн баазгэж зvйрлэж болно. DataSet нь нэг болон тvvнээс дээш DataTable объектуудыг багтааж чаддаг ба тэдгээрийн хооронд relationship тогтоож чадна. Энэ классад жинхэнэ єгєгдлєєс уншсан єгєгдєл байрлах ба ямар нэгэн єєрчлєлт бvр нь тvvн рvv хийгдэж байдаг. ADO.NET-ийн єєр объектыг ашиглан єєрчлєлтийг єгєгдлийн баазруу хадгална. DataTable – Энэ класс нь єгєгдєл бvхий мєрvvдийг агуулж байдаг. Мєр болгон багануудаас бvрдэх ба баганаболгон нэгэн тєрєл бvхий єгєгдлvvдийг агуулж байдаг. DataView – Энэ класс нь онцлог шинжээр харагдах DataTable юм. Энэ объект нь DataTable объект дээр эрэмбэлэлтvvд, шvvлтvvрvvдийг хэрэглэж байдаг. Connection - Энэ класс нь єгєгдлийн эхтэй (data source) холболт хийхэд хэрэглэгддэг. Энэ классад vндсэн OLE DB, SQL server гэсэн 2 тєрєл байна. Command – Энэ класс нь SQL мэдэгдлvvдийг єгєгдлийн эх рvv буцаан дамжуулж байдаг. Та SQL болон stored procedure-уудыг ашиглан бvх єгєгдлийг сэргээх ба єєрчлєлт хийж чадна. Энэ классад єєрчлєлтvvдийг хадгалж чадах, єгєгдєл сэргээх method-ууд бий. CommandBuilder - Энэ класс нь SELECT, INSERT, UPDATE, DELETE command oбъектуудыг байгуулахадхэрэглэгддэг. DataAdapter - Энэ класс нь DataSet эсвэл DataTable-ийг єгєгдлийн баазаас єгєгдлєєр дvvргэхэд хэрэглэгддэг. DataAdapter нь єгєгдлийн баазтай холболт vvсгэх ба SQL мэдэгдэлд тохирох command 8
  • 9.
    Visual Basic.NET oбъектыг байгуулж,єгєгдлийг сэргээн, DataSet эсвэл DataTable-ийг байгуулаад, єгєгдлийн баазаас салгагдана. DataReader - Энэ класс нь єгєгдлийн эхээс єгєгдлийг хурдан уншиж чадах ба forward-only, зєвхєн уншигдах курсор юм. Энэ класс нь DataGrid-vvдийг, ListBox-уудыг, ComboBox-уудыг дvvргэхэд хамгийн тохиромжтой. ADO классуудыг хэрэглэх нь Та дээрхээс .NET ийн зарим классууд яаж єгєгдлийг дамжуулж буйг, DataSet-vvд нь хэрхэн хэрэглэгддэгийг харж байна. DataAdapter-ууд нь SQL Server, Oracle, Access зэрэг єгєгдєл хадгалагч (Data Store)-аас єгєгдєл уншин DataSet-vvдийг дvvргэдэг. DataSet нь байгуулагдсан бол энэ нь WinForm, WebForm, Web Service эсвэл бvр єєр ямар нэгэн Java дээр бичигдсэн Unix сервэр дээр ажиллах вэб хуудасандч хэрэглэгдэж болно. OleDb ба SqlClient Энэ 2 нь ялгаатай шинж бvхий Connection, Command, CommandBuilder, DataAdapter, DataReader классуудтай. OleDb нь OLE DB provider-уудыг хэрэглэн єгєгдлийн эхvvдийг авахад зориулагдсан. Энэ 2 нь єєр єєр NameSpace-д байрлана. Доор OleDb классуудыг хэрхэн тодорхойлохыг жишээ болгон бичье. Dim oConn As OleDb.OleDbConnection Dim oCmd As OleDb.OleDbCommand Dim oBuild As OleDb.OleDbCommandBuilder Dim oDA As OleDb.OleDb.OleDbDataAdapter Dim oDR As OleDb.OleDb.OleDbDataReader Доор Sql классуудыг хэрхэн тодорхойлохыг жишээ болгон бичье. Dim oConn As SqlClient.SqlConnection Dim oCmd As SqlClient.SqlCommand Dim oBuild As SqlClient.SqlCommandBuilder 9
  • 10.
    Visual Basic.NET Dim oDA As SqlClient.SqlDataAdapter Dim oDR As SqlClient.SqlDataReader ADO.NET-г ADO-той харьцуулах нь ADO.NET нь ADO-гийн сайжруулсан, боловсронгуй хувилбар юм. Энэ 2 объект загварын зарим vндсэн єєрчлєлт байдаг боловч эцсийн vр дvн нь ижил хэвээр билээ. Танд єгєгдєл хадгалах, єгєгдєл сэргээх, єгєгдєлд засвар хийх объект загвар хэрэгтэй билээ. ADO нь танд тvvнийг RecordSet-vvдийн тусламжтай гvйцэтгэхийг зєвшєєрдєг бол ADO.NET нь танд тvvнийг DataSet-д болон бусад объектын тусламжтай хийхийг зєвшєєрдєг. ADO.NET ба ADO-гийн vндсэн ялгаа нь ADO.NET нь єгєгдлийн vл холбогдсон (disconnected) хэлбэр, ADO нь холбогдсон тєрлийн объект загваргэдэгт байгаабилээ. ADO.NET Connection Объект ба Command Объект (Visual Basic .NET) Connection Объект ADO.NET Connection объект нь єгєгдлийн баазын холболтыг программ болон database engine 2-ын хооронд хийхэд хэрэглэнэ. Хэрэв та єєрийн SQL Server лvv холболт хийх гэж байгаа бол дараах маягаар бичиж болно. Provider=sqloledb;Data Source=(local);Initial Catalog=Northwind;User ID=sa;Password=; Access 2000 єгєгдлийн баазхэрэглэх бол provider-ийн тэмдэгт мєр доорх загвартай байна. Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:Northwind.mdb Command Объект OleDbCommand объект нь ADO-гийн command объекттой маш тєстэй. Энэ нь SQL мэдэгдлvvдийг хадгалан єгєгдлийн эхтэй дахин дахин ажиллахад хэрэглэгдэнэ. OleDbCommand объект нь SELECT, INSERT, UPDATE, DELETE мэдэгдлvvдийг ажиллуулж чаддаг юм. 10
  • 11.
    Visual Basic.NET Жишээ Доорх жишээндINSERT мэдэгдлийг ашиглан Northwind баазын Customers хvснэгтэнд мөр нэмнэ. 1. Шинээр SQLTester solution vvсгэ. 2. Формдоо txtRows, txtSQL гэсэн 2 TextBox контрол нэмэн, дээрх загвартай болгоно. 3. Button-доо btnExecute гэсэн нэр єгєн, Click үзэгдэл дээрдараахкодыг бичнэ vv. Private Sub btnExecute_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles btnExecute.Click Dim oCmd As OleDb.OleDbCommand Dim strConn As String Try 'Холболтын тэмдэгт мөр strConn = "Provider=sqloledb;" strConn &= "Data Source=(local);" strConn &= "Initial Catalog=Northwind;" strConn &= "User ID=sa;" strConn &= "Password=;" ' Command Объект vvсгэх oCmd = New OleDb.OleDbCommand() ' Command Объектод хэрэглэгдэх Холболт хийх oCmd.Connection = New OleDb.OleDbConnection(strConn) ' Холболтыг нээх oCmd.Connection.Open() ' SQL-ийг TextBox-оос аван Command Объектод руу хийх oCmd.CommandText = txtSQL.Text 11
  • 12.
    Visual Basic.NET ' SQL-ийг ажиллуулан, нийт єєрчлєгдсєн бичлэгийн тоог TextBox-д оноох txtRows.Text = oCmd.ExecuteNonQuery().ToString() MessageBox.Show("SQL мэдэгдэл амжилттай биелэлээ ", "btnExecute_Click()") ' Холболтыг хаах oCmd.Connection.Close() Catch oExcept As Exception txtRows.Text = 0.ToString() MessageBox.Show("SQL ажиллах явцад алдаа гарлаа: " & oExcept.Message, _ "btnExecute_Click()") End Try End Sub Command объектын ExecuteNonQuery method-ыг ажиллуулснаар єгєгдлийн баазад CommandText дах SQL мэдэгдэлмааньхэрэгжинэ. єєрєєрхэлбэлєгєгдлийн баазадмєр нэмэх vйлдлийг хийнэ. Та F5 товч даран программаа ажиллуулна. INSERT мэдэгдэл байгаа text box-д зєв INSERT, UPDATE, DELETE мэдэгдлvvдийг бичиж Execute SQL товчыг даран ажиллагааг нь шалгаарай. Data Binding буюу єгєгдєл бэхлэх (Visual Basic .NET) o Єгєгдлийг DataGrid-рvv бэхлэх o Combo Box-уудтай ажиллах o Параметртэй query vvсгэх o Єгєгдлийг гараас бэхлэх Єгєгдєл бэхлэх (Data binding) нь єгєгдлийн эхийг vvсгэх процесстой холбоотой ба автоматаарформ дээрх контролуудыг єгєгдлийн эхээр хангаж байдаг. Windows формууд єгєгдєл бэхлэлтийг хийж гvйцэтгэхдээ ADO.NET-тэй холбогдож ашигладаг. Та єгєгдєл бэхлэх vед холболт хийх, dataset vvсгэх зэрэг код бичих шаардлаггvй ба .NET framework єєрєє ADO.NET-д хэрэгтэй кодыг vvсгэдэг. Формыг єгєдєлтэй бэхлэсний дараа, форм дээрх контролуудыг єгєгдлийн тодорхой эльментvvдтэй бэхлэж чадна. Ихэнхи vед TextBox контролын Text property-г єгєгдлийн эхийн нэг баганатай бэхлэдэг билээ. Мєн Picturebox контролын зурагуудыг, контролын background болон бусад property-нуудыг бэхлэж болно. 12
  • 13.
    Visual Basic.NET Єгєгдєл бэхлэлтийгЭнгийн єгєгдєл бэхлэх, Комплекс єгєгдєл бэхлэх гэсэн 2 тєрєл байдаг. Энгийн єгєгдєл бэхлэх нь контрол руу дан элемент бэхлэхийг зєвшєєрдєг. Жишээ нь TextBox, Label контролуудыг єгєгдєлтэй бэхлэлт хийх. Комплекс єгєгдєл бэхлэх нь контрол руу нэгээс их элемент бэхлэхийг зєвшєєрдєг. Комплекс єгєгдєл бэхлэхийг зєвшєєрдєг контролуудад DataGrid, ComboBox, ListBox гэх мэт контролууд орно. Єгєгдлийг DataGrid-рvv бэхлэх Єгєгдєл бэхлэхэд хэрэглэгдэх vндсэн чанарууд нь .NET-н орчинд хvснэгтийг Grid-д харуулахад илэрдэг. Ингээд хэрхэн DataGrid бvхий форм vvсгэн, єгєгдлийн баазтай холбох жишээ vзье. Эхлээд vндсэн алхмуудыг тодорхойлъё: 1. Windows Form байгуулах 2. DataSet-ийг vvсгэх болон бэлтгэх 3. DataGrid контролыг формруу нэмээд, єгєгдєл рvv бэхэлнэ. Windows Form байгуулах: Доорх алхмуудыг даган хийснээр жишээний формообайгуулах болно. a. Visual Studio.NET–ийг нээж, New Project товчлуурыг сонгон b. Windows Application-ийг Template-ээс сонгон, Name textbox-д DataBinding гэж нэр єгєн прожектоо vvсгэнэ. c. Properties цонхон дах формын property-нуудаас Name property-д frmProducts, Text property-д Product Information.оноож єгнє. DataSet-ийг vvсгэх болон бэлтгэх o DataAdapter Wizard-ийг хэрэглэх o DataSet класс vvсгэх -DataAdapter Wizard-ийг хэрэглэх Єгєгдлийн баазтай холболт хийхийн тулд OleDbDataAdapter component-ийг Toolbox цонхны Data tab-аас сонгон форм руу чирэх эсвэл давхар товшилт хийнэ. Энэ нь хэдэн алхам бvхий тохируулганы цонх дэлгэцэнд гаргана. DataAdapter нь єгєгдлийн баазаас єгєгдєл дамжуулах ба DataSet нь DataGrid-ийг бэхлэхэдхэрэглэгддэг билээ. a. OleDbDataAdapter-ийг Toolbox цонхний Data tab-аассонго b. Тvvнийг формруу чирээдорхих c. Data Adapter Configuration Wizard цонх гарч ирэх болно. d. Эхний дэлгэц нь мэдээлэлийн чанартай тул “Next” товч дарна. 13
  • 14.
    Visual Basic.NET e.Дараагийн дэлгэцэнд та єєрийн хэрэглэх єгєгдлийн холболтыг хийж єгнє. Хэрэв та New Connection товчлуурыг сонговол дараах дэлгэц гарч ирэх болно. Энэ дэлгэцнээс та data provider-ыг сонгох ба data provider-т хэрэгтэй мэдээлэлvvдийг бєглєх болно. I. Та єєрийн хэрэглэх гэж буй SQL server-ийн нэрийг сонгоно. Энэ жишээнд (local) гэж сонгосон байна. II. SQL server лvv холбогдоход шаардлагатаймэдээллийг (хэрэглэгчийн нэр, пасспорт) оруулна. III. Northwind єгєгдлийн баазыг сонгоно. Энэ баазын Product хvснэгтээс бид мэдээлэлавах болно. Жич: Хэрэв та MSAccess хэрэглэх гэж буй бол Provider tab-аас Microsoft Jet 4.0 OLE DB Provider сонгон, Connection tab-д єгєгдлийн баазын нэрийг сонгож єгнє. f. Wizard-ын дараагийн алхамд Query Type сонгоход хэрэгтэй болно. Та vvнээс: 14
  • 15.
    Visual Basic.NET o Use SQL Statement –ийг сонгон SQL мэдэгдлийг байгуулж, o Create New Stored Procedure-аас wizard-аар stored procedure vvсгэн, o Use Existing Stored Procedures-ийг сонгон сервэр дэх єгєгдлийн баазад буй stored procedure- yyдаасхэрэглэх боломжтой болно. Use SQL Statement–ийг сонгон цааш vргэлжлvvлнэ. b. Энэ дэлгэцэнд SQL мэдэгдэл бичих эсвэл Query Builder-ийг сонгон SQL мэдэгдлvvдийг байгуулж болно. Энэ жишээний хувьд дараах SQL мэдэгдлийг бичлээ. c. SELECT ProductID, ProductName, UnitPrice, UnitsInStock d. FROM Products e. “Next” товчыг дарснаарэнэхvv wizard-ийн тєгсгєлийн алхам руу очих ба “Finish” товчоор vйл явцыг дуусганаа. Vvний vр дvнд OleDbConnection1, OleDbDataAdapter1 объектууд Tray цонхон дээр нэмэгдсэн байх болно. Жич: Энэ жишээнд OleDbDataAdapter-ийг ашигласан. Хэрэв та зєвхєн SQL Server ашиглах бол Sql* component-уудыг ашиглавалилvv vр дvнтэй байх болно. -DataSet класс vvсгэх Visual Studio.NET-д ємнє нь vvсгэсэн DataAdapter объектын query-д суурилан Dataset классыг vvсгэхэд маш хялбарбайдаг. Dataset классыг vvсгэхдээ дараахалхмуудыг хэрэглэнэ. a. Data ->Generate Dataset коммандыг VS.NET цэснээс сонгоно. b. Generate Dataset гэсэн диалог цонх дэлгэцэнд гарч ирнэ. c. “New” option button-ийг сонгон, dsProducts гэсэн нэр єгнє. d. “OK” товчлуурыг дарснаар DataSet бvдvvвч тодорхойлолт бvхий файлба класс зэргийг vvсгэнэ. 15
  • 16.
    Visual Basic.NET Эдгээр алхмуудыггvйцэтгэсний дараа dsProducts1 контрол формын Tray дээр нэмэгдэх ба энэ контрол нь dsProducts.xsd файлыг зааж байдаг. dsProducts.xsd файл нь таны ємнє нь тодорхойлсон SQL мэдэгдлээс vvссэн хvснэгт, багануудыг агуулсан XML бvдvvвч тодорхойлолт юм. DataGrid-ийг єгєгдлєєр дvvргэх Юуны ємнє та DataGrid контролыг frmProducts формдоо байрлуулана. Уг контролыг сонгон Property цонхон дах DataSource property-д dsProducts1, DataMember property-д Products тус тус оноож єгнє. Одоо бид DataGrid контролыг DataSet рvv бэхлэсэн байгаа боловч DataSet нь форм ачаалагдахад автоматаарєгєгдлєєрдvvргэгддэггvй. Иймд форм Load event-д дараахкодыг бичиж єгнє. Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' DataSet контролыг хоослох dsProducts1.Clear() ' DataSet контролыг Products хvснэгтээс єгєгдлєєр дvvргэх OleDbDataAdapter1.Fill(dsProducts1, "Products") End Sub Ингээд бид DataGrid контролыг дvvргэж чадах боллоо. Та одоо прожектоо ажиллуулан (F5) шалгаж vзнэ vv. 16
  • 17.
    Visual Basic.NET Combo Box-уудтайажиллах Бидний vvсгэсэн жишээ багахан хэмжээний єгєгдєлтэй vед тєвєггvй ажиллах боловч хэдэн мянган бичлэгтэй vед тийм ч тохиромжтой биш байх болно. Тиймд бvтээгдэхvvний тєрлийг combo box-оос сонгон, тухайн тєрлийн бvтээгдэхvvнvvдийг дэлгэцэнд DataGrid дээр харуулбал илvv тохиромжтой. Эхлээд combo box-ийг єгєгдлєєрдvvргээд, дараань combo box-ийг хэрэглэн дэлгэцэнд data grid-д харагдах єгєгдлийг хязгаарлая. Хоёр дох Data Adapter, DataSet нэмэх 1. Дахин OleDbDataAdapter-ийг Toolbox-ийн Data tab-аассонгон, формдээрбайрлуулна. 2. <Ємнєх жишээнд хэрэглэж байсан Northwind єгєгдлийн баазын холболтыг хэрэглэнэ. “Next” товч дарна. 3. “Use SQL Statements”-ийг сонгон, “Next” товч дарна. 4. Дараах SQL мэдэгдлийг бичнэ: 5. SELECT CategoryID, CategoryName FROM Categories 6. Энэ диалогоос “Advanced Options” товчлуурыг сонгоно. 7. “Generate Insert, Update, and Delete statements” сонголтыг арилгана. Учир нь бид зєвхєн combo box дvvргэх гэж байгаатул эдгээр коммандуудыг хэрэглэх шаардлагагvй. “Finish” товчыг дарснаар OleDbDataAdapter-ыг vvсгэнэ. Одоо Data ->Generate Dataset коммандыг VS.NET цэснээс сонгон, DataSet-ийн нэрийг dsCat гэж єгнє vv. Combo Box-ыг DataAdapter луу бэхлэх 1. Формд Combo box байрлуулан, идэвжvvл 2. Name property-д cboCategories 3. DataSource property-д dsCat1 4. DropDownStyle property-д DropDownList 5. DisplayMember property-д Categories.CategoryName. Энэ нь дэлгэцэнд харагдах багана ба data grid контролын єгєгдлийг єєрчлєхєдхэрэглэгдэх баганаутгаа авахадтуслана. 6. ValueMember property-д Categories.CategoryID онооно. ValueMember property нь item сонгогдоход жинхэнэ утгыг авна. єєрєєр хэлбэл CategoryName сонгогдоход харгалзах CategoryID-г энэ property- гоос авч чадна. Combo Box-ыг єгєгдєлтэй болгох Combo Box-ыг єгєгдєлтэй болгохын тулд ємнє нь Grid-ийг єгєгдлєєр дvvргэхэд хэрэглэж байсан Load event дээрзарим код бичнэ. Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load dsProducts1.Clear() 17
  • 18.
    Visual Basic.NET OleDbDataAdapter1.Fill(dsProducts1, "Products") ' Combo Box-д єгєгдєл дvvргэхэд хэрэглэгдэн DataSet-ыг бэлтгэх dsCat1.Clear() OleDbDataAdapter2.Fill(dsCat1, "Categories") End Sub Ингээд ComboBox-ыг єгєгдлєєр дvvргэх ажил маань дууслаа. :-) Одоо та F5 товч даран формоо ажиллуулахаддараахдvр зураг харагдах болно. Параметртай Query vvсгэх Одоо бvгдээрээтєрєл сонгогдоход data grid дээр харгалзах бvтээгдэхvvнvvдийг харуулж чаддаг болъё. 1. Data grid контролыг єгєгдєлжvvлдэг кодыг формын Load event-ээс хасна. Дараахкодыг формын Load event-ээс хаснауу. 2. dsProducts1.Clear() 3. OleDbDataAdapter1.Fill(dsProducts1, "Products") 4. OleDbDataAdapter1 объектын SelectCommand property-г єєрчлєн, CategoryID параметр авах боломжтой болгоно. OleDbDataAdapter1 объектыг сонгон Properties window (F4) дах SelectCommand property-гийн дэд property-нуудыг дэлгэнэ. CommandText property-г сонгон, Build (…) товчлуурыг дарснаар дэлгэцэнд Query Builder диалог гарч ирэх болно. WHERE буюу нєхцлийг нэмснээр дараах байдалтайхарагдах болно. 5. SELECT ProductID, ProductName, UnitPrice, UnitsInStock 6. FROM Products 7. WHERE CategoryID = ? OK товчлуурыг дарснаарєєрчлєлт мааньхадгалагдах болно. OleDbDataAdapter1 объектыг сонгон Data -> Generate Dataset менюг сонгон, Ok товчлуурыг дарснаар одоо байгаа dsProducts dataset-ээ дахин байгуулалт хийнэ. 18
  • 19.
    Visual Basic.NET 8.Хэрэглэгч combo box-оос item сонгоход ажиллах код нэмэх Эхлээд cboCategories combo box дээр давхар товшилт хийн, SelectedIndexChanged event процедур vvсгэнэ. Энэ event нь combo box-оос item сонгох vед vvсдэг. Ингээд дараахкодыг бичнэ vv. 9. Private Sub cboCategories_SelectedIndexChanged( ByVal sender As System.Object, _ 10. ByVal e As System.EventArgs) Handles cboCategories.SelectedIndexChanged 11. 12. With OleDbDataAdapter1.SelectCommand.Parameters 13. .Item(0).Value = cboCategories.SelectedValue 14. End With 15. 16. ' dataset-ийг цэвэрлэх 17. DsProducts1.Clear() 18. ' dataset-ийг параметрын утгыг хэрэглэх єгєгдєлжvvлэх 19. OleDbDataAdapter1.Fill(DsProducts1, "Products") 20. End Sub Data adapter-ийн SelectCommand объектыг ашиглан тухайн Parameter объектыг дамжуулахад хэрэглэж байна. Энэ Parameter объектын Value property-д оноож буй combo box-ийн SelectedValue property нь ValueMember-ийн идэвхтэй байгаа утга (CategoryID)-г авна. Combo box-оос нэр сонгоход dataset нь тухайн тєрлєєрдvvргэгдэн, data grid-д автоматаарбайрлана. Хэрэв та бvх vйлдлийг зєв хийсэн бол F5 товч даран прожектоо ажиллуулаад combo box-оос тєрлийн нэр сонгон, datagrid харгалзахєгєгдлєєрдvvргэгдэж байхыг харах болно. Єгєгдлийг гараас бэхлэх Ямар нэгэн Wizard хэрэглэхгvйгээр DataSet класс vvсгэн, Data grid болон бусад контролыг єгєгдлєєр дvvргэж болох ба энэ аргыг хэрэглэснээр маш уян хатан, илvv хурдан ажиллах программ хийх болно. Одоо ємнєх жишээтэй ижил прожект vvсгэе. 1. Та дахин шинэ DataBindGrid гэсэн прожект vvсгэнэ. 2. frmProducts гэсэн форм vvсгэнэ vv. 3. Label, ComboBox, DataGrid контролуудыг формднэмнэ. 4. Тэдний нэрийг харгалзан Label1, cboCategories, grdProducts гэж єєрчлєнє. 5. Формын Load event-д дараахкодыг бичнэ. Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Call ComboLoad() End Sub 19
  • 20.
    Visual Basic.NET ComboLoad eventнь cboCategories combo box-ийг DataTable классаасєгєгдлєєрдvvргэнэ. Private Sub ComboLoad() Dim da As OleDb.OleDbDataAdapter Dim dt As DataTable = New DataTable() Dim strSQL As String Dim strConn As String strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Northwind;User ID=sa" strSQL = "SELECT CategoryId, CategoryName " strSQL &= "FROM Categories" Try ‘Data adapter vvсгэх da = New OleDb.OleDbDataAdapter(strSQL, strConn) ‘DataTable-ийг єгєгдлєєр дvvргэх da.Fill(dt) With cboCategories ' эхлээд Property-нуудад утга онооно .DisplayMember = "CategoryName" .ValueMember = "CategoryId" ' тэгээд DataSource-ийг єгнє .DataSource = dt End With Catch e As Exception MessageBox.Show(e.Message) End Try End Sub 20
  • 21.
    Visual Basic.NET Жич: Хэрэвта Access єгєгдлийн бааз ашиглаж байгаа бол strConn тэмдэгт мєрєнд “Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb” гэж бичээрэй. DisplayMember, ValueMember property-нуудад SQL мэдэгдэлд буй багануудын нэрийг єгєх ёстой. DisplayMember нь combo box-ийн дэлгэцэнд харагдах єгєгдлvvдийг авах баганыг зааж байдаг. Харин ValueMember property нь єєр баганы утгыг хадгалж байдаг combo box-ийн vл харагдах жагсаалтюм. DataGrid-ийг дvvргэх Combo box-ын SelectedIndexChanged event-д дараахкодыг бичье: Private Sub cboCategories_SelectedIndexChanged( ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles cboCategories.SelectedIndexChanged Call GridLoad() End Sub GridLoad процедур нь combo box-оос сонгосон утгаар Grid-ийг дvvргэнэ. Private Sub GridLoad() Dim da As OleDb.OleDbDataAdapter Dim dt As DataTable = New DataTable() Dim strSQL As String Dim strConn As String strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Northwind;User ID=sa" strSQL = "SELECT ProductID, ProductName, UnitPrice, UnitsInStock " strSQL &= "FROM Products " strSQL &= "WHERE CategoryID = " & cboCategories.SelectedValue Try ‘Data adapter vvсгэх da = New OleDb.OleDbDataAdapter(strSQL, strConn) ‘DataTable-ийг єгєгдлєєр дvvргэх da.Fill(dt) grdProducts.PreferredColumnWidth = DataGrid.AutoColumnSize grdProducts.DataSource = dt 21
  • 22.
    Visual Basic.NET Catch e As Exception MessageBox.Show(e.Message) End Try End Sub Connection ба Command Объектууд | дээшээ | DataReader Объект нvvр хуудас ADO.NET DataReader Объект (Visual Basic .NET) o DataReader объект, т vvнийг хэрэглэх o List Box контолыг бv тээгдэхvvнээр дvvргэх o PDSAListItemNumeric класс o Combo box контролыг дvvргэх o Бv тээгдэхvvний мэдээллийгдэлгэцэндгаргах <> DataReader объект, тvvнийг хэрэглэх ADO.NET-д DataSet, DataTable, DataReader объектуудыг VB6-гийн RecordSet объектын оронд хэрэглэх ба DataReader объект нь forward-only тєрлийн cursor юм. DataReader объектод курсорын тєрлvvд болох SequentialAccess, KeyInfo, SchemaOnly, SingleResult, SingleRow тєрлvvдийг хэрэглэж болох боловч vр дvнг vзэхдээ зєвхєн дараагийнхыг vзэхийг зєвшєєрдєг. OleDbDataReader объект нь єгєгдлийн баазаасбичлэгvvдийг маш хурдан уншдаг давуу талтай. DataReader объектыг ашиглан ListBox, ComboBox контролуудыг єгєгдлєєрдvvргэх жишээ vзье. 22
  • 23.
    Visual Basic.NET Одоо дээрхформын контролуудыг єгєгдлєєрдvvргэх жишээ vзье.  List Box контолыг бvтээгдэхvvнээр дvvргэх  Combo box контролыг дvvргэх  Бvтээгдэхvvний мэдээллийг дэлгэцэнд гаргах Private Sub frmProduct_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' List Box контолыг бvтээгдэхvvнээр дvvргэх ListLoad() ' Combo box контролуудыг дvvргэх SupplierLoad() CategoryLoad() End Sub 23
  • 24.
    Visual Basic.NET List Boxконтолыг бvтээгдэхvvнээр дvvргэх Private Sub ListLoad() Dim oCmd As OleDb.OleDbCommand Dim oDR As OleDb.OleDbDataReader Dim oItem As PDSAListItemNumeric Dim strSQL As String Dim strConn As String strConn = ConnectStringBuild() strSQL = "SELECT ProductID, ProductName " strSQL &= "FROM Products" Try oCmd = New OleDb.OleDbCommand() With oCmd .Connection = New OleDb.OleDbConnection(strConn) .Connection.Open() .CommandText = strSQL oDR = .ExecuteReader(CommandBehavior.SequentialAccess) End With lstProducts.Items.Clear() Do While oDR.Read() oItem = New PDSAListItemNumeric() With oDR oItem.ID = CInt(.Item("ProductID")) oItem.Value = .Item("ProductName").ToString() End With lstProducts.Items.Add(oItem) Loop If lstProducts.Items.Count > 0 Then lstProducts.SetSelected(0, True) End If 24
  • 25.
    Visual Basic.NET Catch oExcept As Exception MessageBox.Show(oExcept.Message) End Try End Sub ExecuteReader method дуудагдснаар SELECT мэдэгдэл хэрэгжин, DataReader объект буцаж ирсэн утгыг заах болно. Давталтанд DataReader объектын бvх мєрийг Read method-ыг ашиглан уншина. PDSAListItemNumeric классыг ашиглан List box-ийг дvvргэснээр ID-д харгалзах утгыг авах, давхардсан бvтээгдэхvvн нэмэхээсзайлс хийх болно. Жич: Хэрэх танд дээрх чанар хэрэггvй бол та давталтанд дотор зєвхєн дараах ганц мєр кодыг хэрэглэж болно. lstProducts.Items.Add(oDR.Item("ProductName")) PDSAListItemNumeric класс Дээрх кодонд ашиглагдсан PDSAListItemNumeric классыг хэрхэн vvсгэхийг vзье. Шинэ класс файлыг Project -> Add Class цэсийг сонгон clsListItems.vb гэсэн нэр єгнє vv. Тэгээд дараах кодыг бичнэ. Public Class PDSAListItemNumeric Private mstrValue As String Private mintID As Integer Public Sub New() End Sub Public Sub New(ByVal strValue As String, _ ByVal intID As Integer) mstrValue = strValue mintID = intID End Sub Property Value() As String Get Return mstrValue End Get Set(ByVal Value As String) mstrValue = Value 25
  • 26.
    Visual Basic.NET End Set End Property Property ID() As Integer Get Return mintID End Get Set(ByVal Value As Integer) mintID = Value End Set End Property Public Overrides Function ToString() As String Return mstrValue End Function End Class Дээрх класс нь Value, ID гэсэн 2 property-тэй ба энэ нь текст болон тvлхvvр бvхий хvснэгтээс List box контролыг дvvргэхэд ашиглагдана. ToString method нь vндсэн Object єгєгдлийн тєрлєєс бvх классууд удамшуулж авдаг. Combo box контролыг дvvргэх Product формдээрх 2 combo box-ыг Categories ба Suppliers-vvдээр дvvргэх ёстой. Private Sub CategoryLoad() Dim oCmd As OleDb.OleDbCommand Dim oDR As OleDb.OleDbDataReader Dim strSQL As String Dim strConn As String Dim oItem As PDSAListItemNumeric strConn = ConnectStringBuild() strSQL = "SELECT CategoryID, CategoryName " strSQL &= "FROM Categories" Try 26
  • 27.
    Visual Basic.NET oCmd = New OleDb.OleDbCommand() With oCmd .Connection = New OleDb.OleDbConnection(strConn) .Connection.Open() .CommandText = strSQL ' DataReader объектыг хаах vед холболтыг хаана. oDR = .ExecuteReader(CommandBehavior.CloseConnection) End With Do While oDR.Read() oItem = New PDSAListItemNumeric() With oDR oItem.ID = CInt(.Item("CategoryID")) oItem.Value =.Item("CategoryName").ToString() End With cboCategory.Items.Add(oItem) Loop oDR.Close() 'oCmd.Connection.Close() –vvнийг бичих шаардлагагvй. Catch oExcept As Exception MessageBox.Show(oExcept.Message) End Try End Sub SupplierLoad() процедурыг дээрхтэй тєстэй байдлаар vvсгэнэ. 1. CategoryLoad процедурын хуулбарыг vvсгэн, нэрийг нь SupplierLoad гэж єєрчилнє. 2. SELECT мэдэгдэлд байгаа хvснэгт болон багануудын нэрийг солино. Хvснэгтийн нэрийг Suppliers, багануудын нэрийг SupplierID, CompanyName гэж єєрчилнє. 3. Бvх cboCategory combo box –ыг cboSupplier combo box болгон єєрчилнє. 27
  • 28.
    Visual Basic.NET Бvтээгдэхvvний мэдээллийгдэлгэцэнд гаргах List box контролыг хэрхэн дvvргэх талаар vзсэн билээ. Одоо List box-оос Item сонгоход бусад контролуудыг дvvргэхийг vзье. Формын design view горимд List box контрол дээр давхар товшилт хийн дараах vзэгдлийн процедур vvсгэнэ vv. Private Sub lstProducts_SelectedIndexChanged( ByVal sender As Object, ByVal e As _ System.EventArgs) Handles lstProducts.SelectedIndexChanged FormShow() End Sub Private Sub FormShow() Dim oCmd As OleDb.OleDbCommand Dim oDR As OleDb.OleDbDataReader Dim oItem As PDSAListItemNumeric Dim strSQL As String Dim strConn As String strConn = ConnectStringBuild() ' List Box-оос Primary Key-г авах oItem = CType(lstProducts.SelectedItem, PDSAListItemNumeric) strSQL = "SELECT ProductID, ProductName, " strSQL &= " SupplierID, CategoryID, " strSQL &= " QuantityPerUnit, UnitPrice, " strSQL &= " UnitsInStock, UnitsOnOrder, " strSQL &= " ReorderLevel, Discontinued " strSQL &= " FROM Products " strSQL &= " WHERE ProductID = " & oItem.ID Try oCmd = New OleDb.OleDbCommand() With oCmd .Connection = New OleDb.OleDbConnection(strConn) 28
  • 29.
    Visual Basic.NET .Connection.Open() .CommandText = strSQL oDR = .ExecuteReader(CommandBehavior.SequentialAccess) End With If oDR.Read() Then With oDR txtID.Text = .Item("ProductID").ToString() txtName.Text = .Item("ProductName").ToString() strID = .Item("SupplierID").ToString() Call FindItem(cboSupplier, strID) strID = .Item("CategoryID").ToString() Call FindItem(cboCategory, strID) txtQty.Text = .Item("QuantityPerUnit").ToString() txtPrice.Text = .Item("UnitPrice").ToString() txtInStock.Text = .Item("UnitsInStock").ToString() txtOnOrder.Text = .Item("UnitsOnOrder").ToString() txtReorder.Text = .Item("ReorderLevel").ToString() chkDisc.Checked = CType(.Item("Discontinued"), Boolean) End With End If oDR.Close() oCmd.Connection.Close() Catch oException As Exception MessageBox.Show(oException.Message) End Try End Sub Дараах FindItem функц нь параметрээрдамжиж ирсэн ID-г combo box-оос хайна. Хэрэв олдсон бол Combo box-ын тухайн байрлал нь сонгогдон харагдах болно. Private Sub FindItem(ByVal cboCombo As ComboBox, ByVal strID As String) Dim intLoop As Integer Dim boolFound As Boolean 29
  • 30.
    Visual Basic.NET Dim oItem As PDSAListItemNumeric oItem = New PDSAListItemNumeric() For intLoop = 0 To cboCombo.Items.Count - 1 oItem = CType(cboCombo.Items(intLoop), PDSAListItemNumeric) If oItem.ID = CInt(strID) Then cboCombo.SelectedIndex = intLoop boolFound = True Exit For End If Next If Not boolFound Then cboCombo.SelectedIndex = -1 End If End Sub Єгєгдєл бэхлэх | дээшээ | DataSet Объект нvvр хуудас ADO.NET DataTable ба DataSet (Visual Basic .NET) o DataTable ба DataSet o DataTable объектыг хэрэглэх o DataSet объектыг хэрэглэх o Єєгєгдєлнэмэх, єєрчлєх, устгах DataTable ба DataSet DataSet объект нь санах ой дах єгєгдлийн бааз билээ. Энэ объект нь SQL мэдэгдлээр дамжин єгєгдєлтэй харьцаж байдаг DataTable объектуудыг агуулдаг. DataSet нь єгєгдлийг XML-ээр хадгалдаг. Мєн бvдvvвч мэдээллийг агуулж, DataTable-vvдийн хоорондох relationship-ийг хадгалж байдаг. Та єгєгдлийг нэмэх, засварлах, устгах vйлдлvvдийг DataSet-ээр хийж чадна. Энэ хичээлээр DataTable. DataSet объектуудыг ашиглан єгєгдєл оруулах формхийхийг vзье. 30
  • 31.
    Visual Basic.NET Зураг 1. Биднийжишээнд vзэх формын Load vзэгдлийн процедурт дараахкодыг бичиж єгнє. Private Sub frmProduct_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' Suppliers (Нєєц) combo box-ийг дvvргэх SupplierLoad() ' Categories (Категори) combo box-ийг дvvргэх CategoryLoad() ' DataSet-ийг vvсгэх DataSetCreate() ' Products (бvтээгдэхvvн)–ийн List Box-ийг дvvргэх ListLoad() End Sub DataTable объектыг хэрэглэх Зураг1 дээрх Suppliers, Categories combo box-уудыг DataTable объект ашиглан дvvргэе. Private Sub SupplierLoad() Dim oAdapter As OleDb.OleDbDataAdapter Dim oTable As DataTable = New DataTable() Dim oItem As PDSAListItemNumeric Dim strSQL As String Dim strConn As String Dim intLoop As Integer 31
  • 32.
    Visual Basic.NET strConn = ConnectStringBuild() strSQL = "SELECT SupplierID, CompanyName " strSQL &= "FROM Suppliers" Try oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn) oAdapter.Fill(oTable) For intLoop = 0 To oTable.Rows.Count - 1 oItem = New PDSAListItemNumeric() With oTable.Rows(intLoop) oItem.Value = .Item("CompanyName").ToString() oItem.ID = CInt(.Item("SupplierID")) End With cboSupplier.Items.Add(oItem) Next Catch oExcept As Exception MessageBox.Show(oExcept.Message) End Try End Sub Та combo box-ийг дvvргэхийн тулд OleDbDataAdapter-ийг ашиглан DataTable объектыг єгєгдлєєр дvvргэнэ. Бидний мэдэх PDSAListItemNumeric классыг ашиглан Suppliers хvснэгтээс Combo box контролыг primare key, дэлгэцэнд харагдах утгаар дvvргэнэ. Дараах функц нь єгєгдлєєр хангагчтай холбогдох тэмдэгт мєр буцаана. Та сvлжээ ашиглан SQL Server-тэй холбогдох бол дараахфункцыг єєрчлєн бичээрэй. Private Function ConnectStringBuild() As String Dim strConn As String strConn = "Provider=sqloledb;" strConn &= "Data Source=(local);" strConn &= "Initial Catalog=Northwind;" 32
  • 33.
    Visual Basic.NET strConn &= "User ID=sa" Return strConn End Function Хэрэв танд SQL Server байхгvй бол Microsoft Access-ийн NorthWind жишээ єгєгдлийн баазыг ашиглаж болно. Дараах байдлаартодорхойлох ба та файлынхаазамыг засаж бичээрэй. Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:AccessNorthwind.mdb Categories combo box-ыг дээрхтэйтєстэйбайдлаард vvргэнэ. 1. SupplierLoad процедурын хуулбарыг vvсгэн, нэрийг нь CategoryLoad гэж єєрчилнє. 2. SELECT мэдэгдэлд байгаа хvснэгт болон багануудын нэрийг солино. Хvснэгтийн нэрийг Categories, багануудын нэрийг 3. CategoryID, CategoryName гэж єєрчилнє. 4. PDSAListItemNumeric классаасавч буй багануудын нэрийг єєрчилнє 5. cboSupplier combo box–ыг cboCategory combo box болгон єєрчилнє. DataSet объектыг хэрэглэх DataTable объект нь дан хvснэгтийн єгєгдєл байдаг ба combo box болон list box-уудыг ачаалахадголчлон хэрэглэгддэг. DataSet нэг болон тvvнээс их DataTable-ийг багтаадаг ба єгєгдєл оруулах формд DataSet vvсгэснээр List box-ыг єгєгдлєєрдvvргэх, нэмэх, засах, устгах vйлдлvvдийг гvйцэтгэхэд туслана. Юуны ємнє формд хэрэглэгдэх глобал хувьсагч зарлая. Private хувьсагч нь зєвхєн формд хэрэглэгдэнэ гэдгийг тодорхойлдог. Public Class frmProduct Inherits System.Windows.Forms.Form Private moDS As DataSet Дараах DataSet vvсгэх процедурыг бичье. Private Sub DataSetCreate() Dim oAdapter As OleDb.OleDbDataAdapter Dim strSQL As String Dim strConn As String ' Холболтын тэмдэгт мєрийг авах strConn = ConnectStringBuild() 33
  • 34.
    Visual Basic.NET ' SQL тэмдэгт мєр vvсгэх strSQL = "SELECT * FROM Products" moDS = New DataSet() Try ' Шинэ Data Adapter vvсгэх oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn) ' DataSet-ийг єгєгдсєн хvснэгтээр Adapter-аас дvvргэх oAdapter.Fill(moDS, "Products") ' Primary Key vvсгэх With moDS.Tables("Products") .PrimaryKey = New DataColumn() {.Columns("ProductID")} End With Catch oExcept As Exception MessageBox.Show(oExcept.Message) End Try End Sub Дээрх код бидний ємнє vvсгэсэн DataTable-ийг vvсгэхтэй тєстэй. Энд шинэ “Products” DataTable-ийг DataSet-д vvсгэж байна. Та энэ нэрийг ашиглан DataSet-ийн Tables collection дах хvснэгттэй холбогдоно. Жишээ нь: oDS.Tables(“Products”) нь DataAdapter-аардvvргэгдсэн DataTable объект буцаадаг. Хэрэв та DataSet-ийн DataTable-ээс хайлт хийх бол DataTable-д PrimaryKey (тvлхvvр талбар) баганыг тодорхойлож єгєх хэрэгтэй. PrimaryKey–д нэг болон хэд хэдэн багана тодорхойлж єгч болно. Иймд PrimaryKey нь DataColumn-ын массив тєрєлтэй. Бидний жишээнд нэг л багана тодорхойлох учир нэг урттай DataColumn массивыг PrimaryKey-д оноож єгнє. ListBox-ыг DataSet-ээс дvvргэх нь Private Sub ListLoad() Dim oItem As PDSAListItemNumeric Dim oRow As DataRow LstProducts.Items.Clear() ' DataRow болгоныг давталтаар унших For Each oRow In moDS.Tables("Products").Rows ' Шинэ PrimaryKey болон тайлбарыг агуулах Item vvсгэх 34
  • 35.
    Visual Basic.NET oItem = New PDSAListItemNumeric() With oItem .ID = CInt(oRow.Item("ProductID")) .Value = oRow.Item("ProductName").ToString() End With ' Хvснэгтэнд шинэ мєр нэмэхэд тухайн талбарын утга нь автоматаар нэмэгдэнэ. moDS.Tables("Products").Columns("ProductID").AutoIncrement = True ' Item-ыг list box-руу нэмэх lstProducts.Items.Add(oItem) Next lstProducts.SetSelected(0, True) End Sub DataSet-ээс тодорхой мєрийг хайх Бvтээгдэхvvний жагсаалт дээр товшилт хийхэд тухайн бvтээгдэхvvний талаар дэлгэрэнгvй мэдээллийг формдээрх контролуудадгаргаж суръя. Эхлээдта List box дээр товшилт хийхэд биелэх кодыг бичье. Формын дизайн горим vед давхар товшилт хийн SelectedIndexChanged vзэгдлийн процедурыг vvсгэнэ. Тэгээд дараахкодыг бичнэ. Private Sub lstProducts_SelectedIndexChanged( ByVal sender As Object, ByVal e As _ System.EventArgs) Handles lstProducts.SelectedIndexChanged FormShow() End Sub Дараах FormShow процедур нь DataSet-ээс тодорхой мєрийг хайн, тэр мєрєєс форм дээрх контролуудыг мэдээллээрдvvргэнэ. Private Sub FormShow() Dim oDR As DataRow Dim oItem As PDSAListItemNumeric Dim strID As String ' List Box-оос Primary Key-г авах oItem = CType(lstProducts.SelectedItem, PDSAListItemNumeric) 35
  • 36.
    Visual Basic.NET ' DataSet-ээс мєр хайх With moDS.Tables("Products").Rows oDR = .Find(oItem.ID) End With ' Өгєгдлийг дэлгэцэнд гаргах txtID.Text = oDR("ProductID").ToString() txtName.Text = oDR("ProductName").ToString() strID = oDR("SupplierID").ToString() Call FindItem(cboSupplier, strID) strID = oDR("CategoryID").ToString() Call FindItem(cboCategory, strID) txtQty.Text = oDR("QuantityPerUnit").ToString() txtPrice.Text = oDR("UnitPrice").ToString() txtInStock.Text = oDR("UnitsInStock").ToString() txtOnOrder.Text = oDR("UnitsOnOrder").ToString() txtReorder.Text = oDR("ReorderLevel").ToString() chkDisc.Checked = CType(oDR("Discontinued"). Boolean) End Sub Private Sub FindItem(ByVal cboCombo As ComboBox, _ ByVal strID As String) Dim intLoop As Integer Dim boolFound As Boolean Dim oItem As PDSAListItemNumeric oItem = New PDSAListItemNumeric() For intLoop = 0 To cboCombo.Items.Count - 1 oItem = CType(cboCombo.Items(intLoop), PDSAListItemNumeric) If oItem.ID = CInt(strID) Then cboCombo.SelectedIndex = intLoop boolFound = True Exit For End If Next 36
  • 37.
    Visual Basic.NET If Not boolFound Then cboCombo.SelectedIndex = -1 End If End Sub List box нь зєвхєн Object єгєгдлийн тєрєлтэй байдаг учир Ctype функцыг хэрэглэн PDSAListItemNumeric тєрєл рvv хєрвvvлнэ. Та энэ хєрвvvлэгдсэн тєрлийн ID property-гоос primary key-г авна. Find method нь ID- д харгалзах дан DataRow объектыг буцаадаг. DataRow объектоос багана болгоны утгыг авч контролыг єгєгдлєєрдvvргэж байна. DataSet объектыг ашиглан єгєгдлийг єєрчлєх o DataSet-д мєр нэмэх o DataSet-ийн мєрvvдийг шинэчлэнхадгалах o DataSet дэх мєрийг устгах DataSet-д мєр нэмэх Бидний хийж буй формын Add товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье. Private Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles btnAdd.Click DataAdd() End Sub Та хvснэгт рvv мєр нэмэх vйлдлийг OleDbCommand объектоос INSERT мэдэгдэл, мєн DataSet объектыг ашиглан хийнэ. DataSet нь єгєгдлийн баазтай vл холбогдсон учир та эхлээд DataSet дээр єгєгдєл нэмнэ. Дараань баазтайхолболт хийн, OleDbCommandBuilder объектыг INSERT мэдэгдлийг байгуулна. Private Sub DataAdd() Dim oAdapter As OleDb.OleDbDataAdapter Dim oBuild As OleDb.OleDbCommandBuilder Dim oDR As DataRow Dim strSQL As String Dim strConn As String ' DataSet-ээс DataRow объектыг шинээр vvсгэнэ oDR = moDS.Tables("Products").NewRow() oDR.BeginEdit() 37
  • 38.
    Visual Basic.NET ' Шинэ єгєгдлийг мєр лvv хийх oDR("ProductName") = txtName.Text oDR("SupplierID") = CType(cboSupplier.SelectedItem, PDSAListItemNumeric).ID oDR("CategoryID") = CType(cboCategory.SelectedItem, PDSAListItemNumeric).ID oDR("QuantityPerUnit") = txtQty.Text oDR("UnitPrice") = CDec(txtPrice.Text) oDR("UnitsInStock") = CShort(txtInStock.Text) oDR("UnitsOnOrder") = CShort(txtOnOrder.Text) oDR("ReorderLevel") = CShort(txtReorder.Text) oDR("Discontinued") = CBool(chkDisc.Checked) ' Нэмэх vйлдэл дууссаныг мэдэгдэх oDR.EndEdit() ' DataRow-ийг DataSet рvv нэмэх moDS.Tables("Products").Rows.Add(oDR) Try ' Холболтын тэмдэгт мєрийг авах strConn = ConnectStringBuild() ' SQL тэмдэгт мєр strSQL = "SELECT * FROM Products " ' DataAdapter-ийг шинээр vvсгэх oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn) ' Adapter-аас CommandBuild vvсгэх ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг oBuild = New OleDb.OleDbCommandBuilder(oAdapter) ' Insert Command объектыг авах oAdapter.InsertCommand = oBuild.GetInsertCommand() ' INSERT мэдэгдэл Adapter-аар дамжин хэрэгжинэ. oAdapter.Update(moDS, "Products") 38
  • 39.
    Visual Basic.NET ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг хэлнэ. moDS.AcceptChanges() ' Холболтыг хаах oAdapter.InsertCommand.Connection.Close() ' DataSet-ийг дахин vvсгэх DataSetCreate() ' List box- ийг дахин vvсгэх ListLoad() Catch oException As Exception MessageBox.Show(oException.Message) End Try End Sub Өгєгдлийн бааз руу мєр нэмэхийн тулд эхлээд шинэ мєрийг DataSet-ийн DataTable-д нэмнэ. Шинээр нэмэгдсэн мєрєнд BeginEdit method-оор багануудад єгєгдлvvдийг байрлуулах буюу єгєгдлийг єєрчлєх боломжтой болно. EndEdit method-оор баганануудыг Datarow рvv хадгална. Add method-ын тусламжтайгааршинэ DataRow-ыг DataTable рvv нэмнэ. DataAdapter-аас Builder объектыг OledbCommandBuilder байгуулагчаар дамжуулан vvсгэж байна. Ингэснээр GetInsertCommand method-ыг ашиглан INSERT мэдэгдлийг CommandBuilder объектоос авч чадна. Энэ INSERT мэдэгдэлнь дарааххэлбэртэй байдаг: INSERT INTO "Products"( "ProductName" , "SupplierID" , "CategoryID" , "QuantityPerUnit" , "UnitPrice" , "UnitsInStock" , "UnitsOnOrder" , "ReorderLevel" , "Discontinued" ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? ) Adapter-ын Update method-ын тусламжтайгаарєгєгдєл нэмэгдэх буюу INSERT мэдэгдэлхэрэгжинэ. DataSet-ийн мєрvvдийг шинэчлэн хадгалах Бидний хийж буй формын Update товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье. Private Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles btnUpdate.Click DataUpdate() End Sub 39
  • 40.
    Visual Basic.NET Та DataSet-ийнмєрvvдийг шинэчлэн хадгалахын тулд тухай мєрийг хайж олоод, баганууд дах єгєгдлийг єєрчлєн, DataAdapter ба CommandBuilder объектыг байгуулан, UPDATE мэдэгдлийг ашиглан єгєгдлийг хадгалах болно. Private Sub DataUpdate() Dim oAdapter As OleDb.OleDbDataAdapter Dim oBuild As OleDb.OleDbCommandBuilder Dim oDR As DataRow Dim strSQL As String Dim intID As Integer Dim strConn As String ' List Box-оос Primary Key-г авах intID = CType(lstProducts.SelectedItem, PDSAListItemNumeric).ID ' Шинэчлэх мєрийг хайх oDR = moDS.Tables("Products").Rows.Find(intID) ' Засварлаж эхлэх oDR.BeginEdit() ' Мєр лvv шинэ єгєгдлийг нэмэх oDR("ProductName") = txtName.Text oDR("SupplierID") = CType(cboSupplier.SelectedItem, PDSAListItemNumeric).ID oDR("CategoryID") = CType(cboCategory.SelectedItem, PDSAListItemNumeric).ID oDR("QuantityPerUnit") = txtQty.Text oDR("UnitPrice") = CDec(txtPrice.Text) oDR("UnitsInStock") = CShort(txtInStock.Text) oDR("UnitsOnOrder") = CShort(txtOnOrder.Text) oDR("ReorderLevel") = CShort(txtReorder.Text) oDR("Discontinued") = CBool(chkDisc.Checked) ' Засварлалтыг дуусгах oDR.EndEdit() Try 40
  • 41.
    Visual Basic.NET ' Холболтын тэмдэгт мєрийг авах strConn = ConnectStringBuild() ' SQL тэмдэгт мєр strSQL = "SELECT * FROM Products " ' DataAdapter-ийг шинээр vvсгэх oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn) ' Adapter-аас CommandBuild vvсгэх ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг oBuild = New OleDb.OleDbCommandBuilder(oAdapter) ' Update Command объектыг авах oAdapter.UpdateCommand = oBuild.GetUpdateCommand() ' UPDATE мэдэгдэл Adapter-аар дамжин хэрэгжинэ. oAdapter.Update(moDS, "Products") ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг хэлнэ moDS.AcceptChanges() ' Холболтыг хаах oAdapter.UpdateCommand.Connection.Close() ' List box- ийг дахин vvсгэх ListLoad() Catch oException As Exception MessageBox.Show(oException.Message) End Try End Sub DataSet дэх мєрийг устгах Бидний хийж буй формын Delete товчлуурын Click vзэгдлийн процедурт дараахкодыг бичье. Private Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles btnDelete.Click DataDelete() 41
  • 42.
    Visual Basic.NET End Sub Private Sub DataDelete() Dim oAdapter As OleDb.OleDbDataAdapter Dim oBuild As OleDb.OleDbCommandBuilder Dim oDR As DataRow Dim strSQL As String Dim strConn As String Dim intID As Integer ' Холболтын тэмдэгт мєрийг авах strConn = ConnectStringBuild() ' List Box-оос Primary Key-г авах intID = CType(lstProducts.SelectedItem, PDSAListItemNumeric).ID ' Устгах мєрийг хайх oDR = moDS.Tables("Products").Rows.Find(intID) ' DataRow-ийг устгасан гэж тэмдэглэх oDR.Delete() Try ' SQL тэмдэгт мєр strSQL = "SELECT * FROM Products " ' DataAdapter-ийг шинээр vvсгэх oAdapter = New OleDb.OleDbDataAdapter(strSQL, strConn) ' Adapter-аас CommandBuild vvсгэх ' Энэ нь INSERT, UPDATE, DELETE SQL-vvдийг байгуулдаг oBuild = New OleDb.OleDbCommandBuilder(oAdapter) ' Delete Command объектыг авах oAdapter.DeleteCommand = oBuild.GetDeleteCommand() ' DELETE мэдэгдэл Adapter-аар дамжин хэрэгжинэ. oAdapter.Update(moDS, "Products") 42
  • 43.
    Visual Basic.NET ' DataSet-ийн єєрчлєлтvvдэд єгєгдлийн эх рvv хадгалалт хийгдснийг хэлнэ moDS.AcceptChanges() ' Холболтыг хаах oA 43