SlideShare a Scribd company logo
1 of 4
DataTable ба DataSet

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

Энэ хичээлээр DataTable. DataSet объектуудыг ашиглан єгєгдєл оруулах форм хийхийг vзье.




Зураг 1.

Бидний жишээнд vзэх формын Load vзэгдлийн процедурт дараах кодыг бичиж єгнє.

   private void frmProduct_Load(object sender, System.EventArgs e)
   {
        // Suppliers (Нєєц) combo box-ийг дvvргэх
        SupplierLoad();
        // Categories (Категори) combo box-ийг дvvргэх
        CategoryLoad();

           // DataSet-ийг vvсгэх
           DataSetCreate();
           // Products (бvтээгдэхvvн)–ийн List Box-ийг дvvргэх
           ListLoad();
    }




DataTable объектыг хэрэглэх

Зураг1 дээрх Suppliers, Categories combo box-уудыг DataTable объект ашиглан дvvргэе.

  private void SupplierLoad()
  {
        OleDbDataAdapter oAdapter;
        DataTable oTable = new DataTable();
        PDSAListItemNumeric oItem;
        string strSQL;
        string strConn;
        int intLoop;
        strConn = ConnectStringBuild();
        strSQL = "SELECT SupplierID, CompanyName ";
        strSQL += "FROM Suppliers";
try
           {
                     oAdapter = new OleDbDataAdapter(strSQL, strConn);
                     oAdapter.Fill(oTable);

for(intLoop = 0;intLoop < oTable.Rows.Count ;intLoop++) { oItem = new
PDSAListItemNumeric(); oItem.Value =
oTable.Rows[intLoop]["CompanyName"].ToString(); oItem.ID =
(int)oTable.Rows[intLoop]["SupplierID"]; cboSupplier.Items.Add(oItem); }

           }
           catch (InvalidCastException e1)
           {
                   MessageBox.Show(e1.Message.ToString());
           }
  }

Та combo box-ийг дvvргэхийн тулд OleDbDataAdapter-ийг ашиглан DataTable объектыг югюгдлююр дvvргэнэ.
Бидний мэдэх PDSAListItemNumeric классыг ашиглан Suppliers хvснэгтээс Combo box контролыг primare key,
дэлгэцэнд харагдах утгаар дvvргэнэ.

Дараах функц нь єгєгдлєєр хангагчтай холбогдох тэмдэгт мєр буцаана. Та сvлжээ ашиглан SQL
Server-тэй холбогдох бол дараах функцыг єєрчлєн бичээрэй.

  private string ConnectStringBuild()
  {
        string strConn ;

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

           return strConn;
  }

Хэрэв танд 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 хувьсагч нь зєвхєн формд
хэрэглэгдэнэ гэдгийг тодорхойлдог.

  ///
  /// Summary description for Products.
  ///
  public class frmProduct : System.Windows.Forms.Form
  {
        private DataSet moDS;
Дараах DataSet vvсгэх процедурыг бичье.
  private void DataSetCreate()
  {
        OleDbDataAdapter oAdapter;
        string strSQL;
        string strConn;

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

          // SQL тэмдэгт мєр
          strSQL = "SELECT * ";
          strSQL += "FROM Products";

          moDS = new DataSet();
          try
          {
                  // DataAdapter-ийг шинээр vvсгэх
                  oAdapter = new OleDbDataAdapter(strSQL, strConn);
                  // Data Set-ийг Adapter-аас дvvргэх
                  oAdapter.Fill(moDS, "Products");
                  // Тvлхvvр талбар
                  moDS.Tables["Products"].PrimaryKey =
                          new DataColumn[]{moDS.Tables["Products"].Columns["ProductID"]};
                  moDS.Tables["Products"].Columns["ProductID"].AutoIncrement=true;
          }
          catch (InvalidCastException e1)
          {
                  MessageBox.Show(e1.Message);
          }
  }
Дээрх код бидний юмню 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 void ListLoad()
      {
           PDSAListItemNumeric oItem ;

          lstProducts.Items.Clear();
          // Мөр болгоноор давталт хийж DataRow-д авна
          foreach( DataRow oRow in moDS.Tables["Products"].Rows)
          {

                   // Шинэ тvлхvvр ба тайлбар бvхий Item vvсгэх
oItem = new PDSAListItemNumeric();
                   oItem.ID = (int) oRow["ProductID"];
                   oItem.Value = oRow["ProductName"].ToString();

                   // list box-руу нэмэх
                   lstProducts.Items.Add(oItem);
         }
         lstProducts.SetSelected(0, true);
    }




DataSet-ээс тодорхой мєрийг хайх

Бvтээгдэхvvний жагсаалт дээр товшилт хийхэд тухайн бvтээгдэхvvний талаар дэлгэрэнгvй мэдээллийг форм
дээрх контролуудад гаргаж суръя. Эхлээд та List box дээр товшилт хийхэд биелэх кодыг бичье.

Формын дизайн горим vед давхар товшилт хийн SelectedIndexChanged vзэгдлийн процедурыг
vvсгэнэ. Тэгээд дараах кодыг бичнэ.

    private void lstProducts_SelectedIndexChanged(object sender, System.EventArgs e)
    {
         FormShow();
    }

Дараах FormShow процедур нь DataSet-ээс тодорхой мюрийг хайн, тэр мюрююс форм дээрх контролуудыг
мэдээллээр дvvргэнэ.
    private void FormShow()
    {
         DataRow oDR;
         PDSAListItemNumeric oItem;
         string strID;

         // List Box-оос Primary Key-г авах
         oItem =(PDSAListItemNumeric)lstProducts.SelectedItem;

         // DataSet-ээс мєр хайх
         oDR=moDS.Tables["Products"].Rows.Find(oItem.ID);

         // Өгєгдлийг дэлгэцэнд гаргах
         txtID.Text = oDR["ProductID"].ToString();
         txtName.Text = oDR["ProductName"].ToString();
         strID = oDR["SupplierID"].ToString();
         FindItem(cboSupplier, strID);
         strID = oDR["CategoryID"].ToString();
         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 = System.Convert.ToBoolean (oDR["Discontinued"]);
    }
List box нь зювхюн Object югюгдлийн тюрюлтэй байдаг учир Ctype функцыг хэрэглэн PDSAListItemNumeric тюрюл рvv
хюрвvvлнэ. Та энэ хюрвvvлэгдсэн тюрлийн ID property-гоос primary key-г авна. Find method нь ID-д харгалзах дан
DataRow объектыг буцаадаг. DataRow объектоос багана болгоны утгыг авч контролыг югюгдлююр дvvргэж байна.




`

More Related Content

Viewers also liked (14)

EL SALVADOR: Ley de Creacion de la SIGET (dic. 2012) - 1808
EL SALVADOR: Ley de Creacion de la SIGET (dic. 2012) - 1808EL SALVADOR: Ley de Creacion de la SIGET (dic. 2012) - 1808
EL SALVADOR: Ley de Creacion de la SIGET (dic. 2012) - 1808
 
Presentación1
Presentación1Presentación1
Presentación1
 
Triduo pascual jueves santo 2015
Triduo pascual jueves santo 2015Triduo pascual jueves santo 2015
Triduo pascual jueves santo 2015
 
Internet paso del tiempo
Internet paso del tiempoInternet paso del tiempo
Internet paso del tiempo
 
Programa Foto 3
Programa Foto 3Programa Foto 3
Programa Foto 3
 
Domingo 2º cuaresma b 2015
Domingo 2º cuaresma b 2015Domingo 2º cuaresma b 2015
Domingo 2º cuaresma b 2015
 
Pediculosis
PediculosisPediculosis
Pediculosis
 
Presentacion
PresentacionPresentacion
Presentacion
 
Exposé
ExposéExposé
Exposé
 
test
testtest
test
 
Generos literarios
Generos  literariosGeneros  literarios
Generos literarios
 
Teoría vigotsky cuadro
Teoría vigotsky cuadroTeoría vigotsky cuadro
Teoría vigotsky cuadro
 
Homilia domund 2014
Homilia domund 2014Homilia domund 2014
Homilia domund 2014
 
510 an 10_fevereiro_2015.ok (1)
510 an 10_fevereiro_2015.ok (1)510 an 10_fevereiro_2015.ok (1)
510 an 10_fevereiro_2015.ok (1)
 

Similar to Data set

Similar to Data set (16)

Data set дэх мєрийг устгах
Data set дэх мєрийг устгахData set дэх мєрийг устгах
Data set дэх мєрийг устгах
 
datatable ,dataset,datagridview in C#
datatable ,dataset,datagridview in C#datatable ,dataset,datagridview in C#
datatable ,dataset,datagridview in C#
 
Blog vpii-lecture8
Blog vpii-lecture8Blog vpii-lecture8
Blog vpii-lecture8
 
өгөгдлийн сан
өгөгдлийн санөгөгдлийн сан
өгөгдлийн сан
 
Android json parsing
Android json parsingAndroid json parsing
Android json parsing
 
Lecture3
Lecture3Lecture3
Lecture3
 
Dynamic web 10
Dynamic web 10Dynamic web 10
Dynamic web 10
 
Se304 lec8
Se304 lec8Se304 lec8
Se304 lec8
 
Лекц №13
Лекц №13Лекц №13
Лекц №13
 
Se304 lec11
Se304 lec11Se304 lec11
Se304 lec11
 
Lecture
LectureLecture
Lecture
 
Lecture15
Lecture15Lecture15
Lecture15
 
U.cs101 лаборатори 8
U.cs101 лаборатори 8U.cs101 лаборатори 8
U.cs101 лаборатори 8
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
 
Se304 lec12
Se304 lec12Se304 lec12
Se304 lec12
 
Dynamic web 11
Dynamic web 11Dynamic web 11
Dynamic web 11
 

Data set

  • 1. DataTable ба DataSet DataSet объект нь санах ой дах єгєгдлийн бааз билээ. Энэ объект нь SQL мэдэгдлээр дамжин єгєгдєлтэй харьцаж байдаг DataTable объектуудыг агуулдаг. DataSet нь єгєгдлийг XML-ээр хадгалдаг. Мєн бvдvvвч мэдээллийг агуулж, DataTable-vvдийн хоорондох relationship-ийг хадгалж байдаг. Та єгєгдлийг нэмэх, засварлах, устгах vйлдлvvдийг DataSet-ээр хялбархан гvйцэтгэж чадна. Энэ хичээлээр DataTable. DataSet объектуудыг ашиглан єгєгдєл оруулах форм хийхийг vзье. Зураг 1. Бидний жишээнд vзэх формын Load vзэгдлийн процедурт дараах кодыг бичиж єгнє. private void frmProduct_Load(object sender, System.EventArgs e) { // Suppliers (Нєєц) combo box-ийг дvvргэх SupplierLoad(); // Categories (Категори) combo box-ийг дvvргэх CategoryLoad(); // DataSet-ийг vvсгэх DataSetCreate(); // Products (бvтээгдэхvvн)–ийн List Box-ийг дvvргэх ListLoad(); } DataTable объектыг хэрэглэх Зураг1 дээрх Suppliers, Categories combo box-уудыг DataTable объект ашиглан дvvргэе. private void SupplierLoad() { OleDbDataAdapter oAdapter; DataTable oTable = new DataTable(); PDSAListItemNumeric oItem; string strSQL; string strConn; int intLoop; strConn = ConnectStringBuild(); strSQL = "SELECT SupplierID, CompanyName "; strSQL += "FROM Suppliers";
  • 2. try { oAdapter = new OleDbDataAdapter(strSQL, strConn); oAdapter.Fill(oTable); for(intLoop = 0;intLoop < oTable.Rows.Count ;intLoop++) { oItem = new PDSAListItemNumeric(); oItem.Value = oTable.Rows[intLoop]["CompanyName"].ToString(); oItem.ID = (int)oTable.Rows[intLoop]["SupplierID"]; cboSupplier.Items.Add(oItem); } } catch (InvalidCastException e1) { MessageBox.Show(e1.Message.ToString()); } } Та combo box-ийг дvvргэхийн тулд OleDbDataAdapter-ийг ашиглан DataTable объектыг югюгдлююр дvvргэнэ. Бидний мэдэх PDSAListItemNumeric классыг ашиглан Suppliers хvснэгтээс Combo box контролыг primare key, дэлгэцэнд харагдах утгаар дvvргэнэ. Дараах функц нь єгєгдлєєр хангагчтай холбогдох тэмдэгт мєр буцаана. Та сvлжээ ашиглан SQL Server-тэй холбогдох бол дараах функцыг єєрчлєн бичээрэй. private string ConnectStringBuild() { string strConn ; strConn = "Provider=sqloledb;"; strConn += "Data Source=(local);"; strConn += "Initial Catalog=Northwind;"; strConn += "User ID=sa"; return strConn; } Хэрэв танд 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йцэтгэхэд туслана.
  • 3. Юуны ємнє формд хэрэглэгдэх глобал хувьсагч зарлая. Private хувьсагч нь зєвхєн формд хэрэглэгдэнэ гэдгийг тодорхойлдог. /// /// Summary description for Products. /// public class frmProduct : System.Windows.Forms.Form { private DataSet moDS; Дараах DataSet vvсгэх процедурыг бичье. private void DataSetCreate() { OleDbDataAdapter oAdapter; string strSQL; string strConn; // Холболтын тэмдэгт мєрийг авах strConn = ConnectStringBuild(); // SQL тэмдэгт мєр strSQL = "SELECT * "; strSQL += "FROM Products"; moDS = new DataSet(); try { // DataAdapter-ийг шинээр vvсгэх oAdapter = new OleDbDataAdapter(strSQL, strConn); // Data Set-ийг Adapter-аас дvvргэх oAdapter.Fill(moDS, "Products"); // Тvлхvvр талбар moDS.Tables["Products"].PrimaryKey = new DataColumn[]{moDS.Tables["Products"].Columns["ProductID"]}; moDS.Tables["Products"].Columns["ProductID"].AutoIncrement=true; } catch (InvalidCastException e1) { MessageBox.Show(e1.Message); } } Дээрх код бидний юмню 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 void ListLoad() { PDSAListItemNumeric oItem ; lstProducts.Items.Clear(); // Мөр болгоноор давталт хийж DataRow-д авна foreach( DataRow oRow in moDS.Tables["Products"].Rows) { // Шинэ тvлхvvр ба тайлбар бvхий Item vvсгэх
  • 4. oItem = new PDSAListItemNumeric(); oItem.ID = (int) oRow["ProductID"]; oItem.Value = oRow["ProductName"].ToString(); // list box-руу нэмэх lstProducts.Items.Add(oItem); } lstProducts.SetSelected(0, true); } DataSet-ээс тодорхой мєрийг хайх Бvтээгдэхvvний жагсаалт дээр товшилт хийхэд тухайн бvтээгдэхvvний талаар дэлгэрэнгvй мэдээллийг форм дээрх контролуудад гаргаж суръя. Эхлээд та List box дээр товшилт хийхэд биелэх кодыг бичье. Формын дизайн горим vед давхар товшилт хийн SelectedIndexChanged vзэгдлийн процедурыг vvсгэнэ. Тэгээд дараах кодыг бичнэ. private void lstProducts_SelectedIndexChanged(object sender, System.EventArgs e) { FormShow(); } Дараах FormShow процедур нь DataSet-ээс тодорхой мюрийг хайн, тэр мюрююс форм дээрх контролуудыг мэдээллээр дvvргэнэ. private void FormShow() { DataRow oDR; PDSAListItemNumeric oItem; string strID; // List Box-оос Primary Key-г авах oItem =(PDSAListItemNumeric)lstProducts.SelectedItem; // DataSet-ээс мєр хайх oDR=moDS.Tables["Products"].Rows.Find(oItem.ID); // Өгєгдлийг дэлгэцэнд гаргах txtID.Text = oDR["ProductID"].ToString(); txtName.Text = oDR["ProductName"].ToString(); strID = oDR["SupplierID"].ToString(); FindItem(cboSupplier, strID); strID = oDR["CategoryID"].ToString(); 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 = System.Convert.ToBoolean (oDR["Discontinued"]); } List box нь зювхюн Object югюгдлийн тюрюлтэй байдаг учир Ctype функцыг хэрэглэн PDSAListItemNumeric тюрюл рvv хюрвvvлнэ. Та энэ хюрвvvлэгдсэн тюрлийн ID property-гоос primary key-г авна. Find method нь ID-д харгалзах дан DataRow объектыг буцаадаг. DataRow объектоос багана болгоны утгыг авч контролыг югюгдлююр дvvргэж байна. `