35-2.¸¶¹ý»çÀÇ ÄÚµå

35-2-1.½ºÅ°¸¶ ÆÄÀÏ

ÀÌ Àý¿¡¼­´Â ¸¶¹ý»ç°¡ ÀÛ¼ºÇÑ ¼Ò½º¸¦ ºÐ¼®ÇØ º¸ÀÚ. ¸¶¹ý»ç°¡ ÇÁ·ÎÁ§Æ®¿¡ ¹«½¼ Áþ°Å¸®¸¦ ÇØ ³õ¾Ò´ÂÁö ¿¬±¸ÇØ º¸¸é ADO.NETÀÇ Å« ±¸Á¶¸¦ ±¸°æÇØ º¼ ¼ö ÀÖ°í ÀÌÈÄ Äڵ带 ¾î¶² ½ÄÀ¸·Î º¯ÇüÇÒ ¼ö ÀÖ´ÂÁöµµ °¨ÀâÀ» ¼ö ÀÖ´Ù. ¿ÜÇü»óÀ¸·Î´Â µ¥ÀÌÅÍ ¼Ò½ºÃ¢¿¡ ¸¶¹ý»ç·Î Ãß°¡ÇÑ Å×À̺íÀÌ Ç¥½ÃµÇ¾î ÀÖ°í ¼Ö·ç¼Ç Ž»ö±â¿¡ µ¥ÀÌÅÍ ¼Ò½º¿¡ ´ëÇÑ ½ºÅ°¸¶ ÆÄÀÏ°ú ±× ºÎ¼Ó ÆÄÀÏÀÌ Ãß°¡µÈ´Ù.

¼Ö·ç¼Ç Ž»ö±âÀÇ ADOTestDataSet.xsd ÆÄÀÏÀÌ ¹æ±Ý Ãß°¡ÇÑ µ¥ÀÌÅÍ ¼Ò½ºÀÇ ½ºÅ°¸¶ ÆÄÀÏÀ̸ç ÀÌ ÆÄÀÏ¿¡ µ¥ÀÌÅÍ ¼Ò½ºÀÇ ±¸Á¶°¡ ±â·ÏµÇ¾î ÀÖ´Ù. XSD ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¸é µ¥ÀÌÅÍ ÁýÇÕ µðÀÚÀ̳ʰ¡ ¿­¸®¸ç ¸¶¹ý»ç°¡ ¸¸µç µ¥ÀÌÅÍ ÁýÇÕÀ» ÆíÁýÇÒ ¼ö ÀÖ´Ù. µðÀÚÀ̳ÊÀÇ »ç¿ë ¹æ¹ýÀº ´ÙÀ½ Àå¿¡¼­ µû·Î ¾Ë¾Æº¸±â·Î ÇÑ´Ù. ÀÏ´ÜÀº XSD ½ºÅ°¸¶ ÆÄÀÏÀÌ ¾î¶»°Ô »ý°å´ÂÁö ¸Þ¸ðÀåÀ¸·Î ¿­¾î º¸ÀÚ.

´ëÃæ Äf¾î º¸¸é ¾î¶² Á¤º¸¸¦ Á¤ÀÇÇÏ´ÂÁö ÁüÀÛÇÒ ¼ö ÀÖ´Ù. Å×À̺í À̸§°ú ¿¬°á ¹®ÀÚ¿­, Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â Äõ¸®¹®, Äõ¸®¹®°ú ¿¬°áµÇ´Â ÆĶó¹ÌÅÍ µîÀÌ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ÆÄÀÏÀº µ¥ÀÌÅÍ ¼Ò½ºÀÇ ½ºÅ°¸¶¸¦ XML·Î Á¤ÀÇÇÑ °ÍÀÌ¸ç ¸¶¹ý»ç´Â ¿¬°áÇÑ µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ ÀÌ ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù.

C# ¼Ò½º¿¡¼­ XML ÆÄÀÏÀ» ÅëÇØ µ¥ÀÌÅ͸¦ ¹Ù·Î ¾×¼¼½ºÇÒ ¼ö ¾øÀ¸¸ç ½ºÅ°¸¶ ±¸Á¶¸¦ ·¡ÇÎÇϴ Ŭ·¡½º¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ÀÌ º¯È¯À» ÇÏ´Â À¯Æ¿¸®Æ¼°¡ XSD.EXEÀÌ´Ù. °ú¿¬ ±×·±Áö ¸í·ÉÇàÀ¸·Î ³ª°¡ Å×½ºÆ®ÇØ º¸ÀÚ. ½ÃÀÛ ¸Þ´º¿¡¼­ ºñÁÖ¾ó ½ºÆ©µð¿À ¸í·É ÇÁ·ÒÇÁÆ®¸¦ ¼±ÅÃÇϸé Æнº°¡ °É·Á ¹Ù·Î Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù. DSWizard ÇÁ·ÎÁ§Æ® Æú´õ·Î À̵¿ÇÑ ÈÄ ´ÙÀ½ ¸í·ÉÀ» ½ÇÇàÇØ º¸ÀÚ.

 

copy ADOTestDataSet.xsd Temp.xsd

xsd /d Temp.xsd

 

¿øº» ÆÄÀÏÀ» À¯ÁöÇϱâ À§ÇØ Àӽà ÆÄÀÏ·Î º¹»çÇÏ°í xsd À¯Æ¿¸®Æ¼·Î ÄÄÆÄÀÏÇϸé Temp.cs ÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù. ÀÌ ÆÄÀÏÀ» ¸Þ¸ðÀåÀ¸·Î ¿­¾î º¸¸é ÄÄÆÄÀÏ °¡´ÉÇÑ C# Ŭ·¡½º°¡ Á¤ÀǵǾî ÀÖ´Ù. XSD.EXEÀÇ /l ½ºÀ§Ä¡¸¦ »ç¿ëÇϸé C# »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ¾ð¾î·Îµµ º¯È¯ÇÒ ¼ö ÀÖ´Ù. ´å³ÝÀÌ ¾ð¾î¿¡ µ¶¸³ÀûÀÎ °³¹ßÅøÀÎ ¸¸Å­ ´Ù¾çÇÑ ¾ð¾î¸¦ Áö¿øÇÑ´Ù.

 

xsd /d /l:VB Temp.xsd

xsd /d /l:JS Temp.xsd

xsd /d /l:CPP Temp.xsd

 

ÀÌ ¸í·É¿¡ ÀÇÇØ Temp.vb, Temp.js, Temp.h µîÀÇ ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. °¢ ÆÄÀÏÀ» ¿­¾î º¸¸é ¾ð¾îº°·Î »ý¼ºµÈ Ŭ·¡½º¸¦ ±¸°æÇÒ ¼ö ÀÖ´Ù. ¸¶¹ý»ç´Â XSD.EXE¸¦ È£ÃâÇÏ¿© C# ¼Ò½º¸¦ »ý¼ºÇÏ°í ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÏ´Â °úÁ¤±îÁö ÀÚµ¿À¸·Î ¼öÇàÇÑ´Ù. ±×·¡¼­ ADOTestDataSet.xsd ÆÄÀϷκÎÅÍ ADOTestDataSet.Designer.cs ÆÄÀÏÀÌ »ý¼ºµÇ¸ç ÀÌ ÆÄÀÏÀÌ ºÐ¼® ´ë»óÀÌ´Ù. ÀÌ ÆÄÀÏ¿¡ ÀÛ¼ºµÈ Äڵ忡 ÀÇÇØ Å×À̺íÀÌ ÀÐÇôÁø´Ù.

35-2-2.¼Ò½º ºÐ¼®

µðÀÚÀ̳ʰ¡ »ý¼ºÇÑ CS ¼Ò½º ÆÄÀÏ¿¡´Â µ¥ÀÌÅÍ ¼Ò½º¸¦ ¾×¼¼½ºÇÏ´Â C# Ŭ·¡½º°¡ Á¤ÀǵǾî ÀÖ´Ù. 1500ÁÙ °¡·® µÇ´Âµ¥ ±×³ª¸¶ Å×À̺íÀÌ ±Ø´ÜÀûÀ¸·Î ´Ü¼øÇØ ÀÌ Á¤µµÁö Á¶±Ý º¹ÀâÇÑ Å×À̺íÀ» ¸î °³¸¸ ÀÐÀ¸¸é ¸¸ÁÙÀ» ³Ñ¾î°¡´Â °ÍÀº Àϵµ ¾Æ´Ï´Ù.

°¢Á¾ ¾îÆ®¸®ºäÆ®¿Í ¿¹¿Ü ó¸® ±¸¹®, XML ÁÖ¼® µîÀÌ ÁË´Ù Æ÷ÇԵǾî ÀÖ¾î ±¸Á¶°¡ º¹ÀâÇϸç Çö±âÁõÀÌ ³¯ Á¤µµ´Ù. »ç¶÷À» À§ÇØ ¸¸µç Äڵ尡 ¾Æ´Ï´Ù º¸´Ï °¡µ¶¼ºÀº °í·ÁÇÏÁö ¾Ê¾Ò´Ù. ´ÙÇàÈ÷ Áö±Ý ´çÀå ÀÌ Äڵ带 ¸ðµÎ ÀÌÇØÇÒ ÇÊ¿ä´Â ¾øÁö¸¸ ¾î¶² Ŭ·¡½º°¡ Á¤ÀǵǾî ÀÖ´ÂÁö¿Í ´ëÃæÀÇ ±¸Á¶´Â ÆľÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. CS ÆÄÀÏ¿¡´Â µÎ °³ÀÇ ³×ÀÓ½ºÆäÀ̽º¿Í ´ÙÀ½ ´Ù¼¸ °³ÀÇ ÁÖ¿ä Ŭ·¡½º°¡ Á¤ÀǵǾî ÀÖ´Ù.

 

Ŭ·¡½º

±â¹Ý Ŭ·¡½º

¼³¸í

ADOTestDataSet

DataSet

µ¥ÀÌÅͺ£À̽º

tblPeopleDataTable

DataTable

Å×À̺í

tblPeopleRow

DataRow

·¹ÄÚµå

tblPeopleAdapter

Component

¿¬°á ¹× ¸í·É

TableAdapterManager

Component

°èÃþÀû ¾÷µ¥ÀÌÆ® Áö¿ø

 

µ¥ÀÌÅÍ ÁýÇվȿ¡ Å×À̺íÀÌ Æ÷ÇԵǾî ÀÖ°í Å×À̺í¾È¿¡ ¿­°ú ÇàÀÌ Æ÷ÇԵǾî ÀÖ¾î ¸Þ¸ð¸®»óÀÇ µ¥ÀÌÅͺ£À̽º ¿ªÇÒÀ» ÇÑ´Ù. ¾î´ðÅÍ ¾È¿¡ ¿¬°á°ú ¸í·É °´Ã¼°¡ Æ÷ÇԵǾî ÀÖ¾î ¼­¹ö·ÎÀÇ ¿¬°á°ú ¸í·É 󸮸¦ ´ã´çÇÑ´Ù. ÀÌ Å¬·¡½º°¡ ÇùÁ¶ÀûÀ¸·Î µ¿ÀÛÇÏ¿© ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ´Ù. ADO.NETÀ» Á¦´ë·Î È°¿ëÇÏ·Á¸é ¸¶¹ý»ç°¡ »ý¼ºÇÑ Å¬·¡½ºÀÇ Äڵ带 ÀÌÇØÇØ¾ß ÇÏ¸ç ±×·¯±â À§ÇØ ±â¹Ý Ŭ·¡½º¿¡ ´ëÇÑ ±âº»ÀûÀÎ Á¤ÀÇ¿Í ±â´É¿¡ ´ëÇØ ¿¬±¸ÇØ¾ß ÇÑ´Ù.

µðÀÚÀ̳ʰ¡ ¸¸µç CS ÆÄÀÏÀ» ¿­¾î ³õ°í óÀ½ºÎÅÍ ¼ø¼­´ë·Î ÁÖ¿ä ºÎºÐÀ» ±¸°æÇØ º¸ÀÚ. ´Ü, ¸¶¹ý»ç°¡ ¸¸µç ÄÚµå´Â ¾îÆ®¸®ºäÆ®°¡ ´öÁö ´öÁö ºÙ¾î ÀÖ°í ¸ðµç Ŭ·¡½º¿¡ ³×ÀÓ½ºÆäÀ̽º°¡ ÁöÁ¤µÇ¾î ÀÖ¾î Á¤½Å »ç³³´Ù. ¸â¹ö¸¶´Ù ºÙ¾î ÀÖ´Â this. ¼Ò¼ÓÀº »èÁ¦ÇÏ°í ³×ÀÓ½ºÆäÀ̽º ÁöÁ¤µµ »ý·«ÇÏ¿© °£·«ÇÏ°Ô Ç¥±âÇϱâ·Î ÇÑ´Ù. System.Data.DataSet À» DataSetÀ¸·Î Ç¥±âÇÑ´Ù´Â ¶æÀÌ´Ù. ¶Ç ¸ðµç ¸â¹ö¸¦ ´Ù ³ª¿­ÇÏÁö ¾Ê°í Áß¿äÇÑ ¸î °¡Áö ¸â¹ö¸¸ ºÐ¼®ÇØ º»´Ù.

µ¥ÀÌÅÍ ÁýÇÕ

µ¥ÀÌÅÍ ÁýÇÕ Å¬·¡½ºÀÎ ADOTestDataSetÀº ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù. Çü½ÄÀûÀÎ °Í°ú Áß¿äÇÏÁö ¾ÊÀº ³»¿ëÀº °È¾î ³»°í ÇÙ½É Äڵ常 °£Ã߸®´Â ´ë½Å Çѱ۷ΠÁÖ¼®À» ´Þ¾Æ µÎ¾ú´Ù.

 

public partial class ADOTestDataSet : DataSet {

 

         // ³»ºÎ¿¡ Æ÷ÇÔµÈ Å×ÀÌºí °´Ã¼

         private tblPeopleDataTable tabletblPeople;

 

         // »ý¼ºÀÚ

         public ADOTestDataSet() {

                      InitClass();

         }

 

         // Ŭ·¡½º ÃʱâÈ­

         private void InitClass() {

                      DataSetName = "ADOTestDataSet";

                      tabletblPeople = new tblPeopleDataTable();

                      base.Tables.Add(this.tabletblPeople);

         }

 

         // ³»ºÎ Æ÷ÇÔ Å×À̺íÀ» ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼ

         public tblPeopleDataTable tblPeople {

                      get {

                                   return tabletblPeople;

                      }

         }

         ....

 

¼±¾ð¹®¿¡¼­ º¸´Ù½ÃÇÇ ADOTestDataSet Ŭ·¡½º´Â ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ DataSet Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµÈ´Ù. ±×·¡¼­ DataSetÀÇ ¸ðµç ±â´ÉÀ» »ó¼Ó¹ÞÀ¸¸ç ±× Áß ÀϺδ ÀçÁ¤ÀÇÇÏ°í ´õ ÇÊ¿äÇÑ Ãß°¡ÀûÀΠ󸮱îÁö ±¸ÇöÇÑ´Ù. ÀÌ ¾È¿¡ Å×ÀÌºí °´Ã¼°¡ Æ÷ÇԵǾî ÀÖ°í Å×ÀÌºí °´Ã¼¸¦ ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼµµ ¼±¾ðµÇ¾î ÀÖ¾î °´Ã¼.tblPeople·Î Å×À̺íÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.

»ý¼ºÀÚ¿¡¼­´Â InitClass¸¦ È£ÃâÇϸç ÀÌ ¸Þ¼­µå¿¡¼­ µ¥ÀÌÅÍ ÁýÇÕÀÇ ÇÁ·ÎÆÛƼ¸¦ ÃʱâÈ­ÇÏ°í Å×ÀÌºí °´Ã¼¸¦ »ý¼ºÇÏ¿© Tables Ä÷º¼Ç¿¡ Ãß°¡ÇÑ´Ù. ¿¹Á¦¿¡¼­´Â Å×À̺íÀÌ Çϳª¹Û¿¡ ¾ø¾î InitClassÀÇ Äڵ尡 ´Ü¼øÇÏÁö¸¸ ¿©·¯ °³ÀÇ Å×À̺íÀÌ ÀÖ´Ù¸é °ü°è±îÁö »ý¼ºÇÏ¿© Ãß°¡ÇÑ´Ù. µ¥ÀÌÅÍ ÁýÇÕÀ̶õ Å×À̺í°ú °ü°èÀÇ ÁýÇÕÀ̹ǷΠ½ºÅ°¸¶¿¡ Á¤ÀÇµÈ ¸ðµç °´Ã¼°¡ Æ÷ÇԵǾî¾ß ÇÑ´Ù.

Å×À̺í Ŭ·¡½º

tblPeopleDataTable Ŭ·¡½º´Â tblPeople Å×À̺íÀ» Á¤ÀÇÇÑ´Ù. Å×ÀÌºí¸¶´Ù ·¡ÇΠŬ·¡½º¸¦ Çϳª¾¿ »ý¼ºÇÑ´Ù. µ¥ÀÌÅÍ ÁýÇÕ¿¡ Æ÷ÇԵǴ Å×À̺íÀ̹ǷΠADOTestDataSet¿¡ Áßø Ŭ·¡½º·Î ¼±¾ðµÇ¾î ÀÖ´Ù.

 

public partial class tblPeopleDataTable : DataTable, IEnumerable {

 

         // Å×ÀÌºí¿¡ ¼ÓÇÑ ¿­

         private DataColumn columnName;

         private DataColumn columnAge;

         private DataColumn columnMale;

 

         // »ý¼ºÀÚ

         public tblPeopleDataTable() {

                      this.TableName = "tblPeople";

                      this.InitClass();

         }

 

         // Ŭ·¡½º ÃʱâÈ­

         private void InitClass() {

                      columnName = new DataColumn("Name", typeof(string), null, MappingType.Element);

                      base.Columns.Add(this.columnName);

                      columnAge = new DataColumn("Age", typeof(int), null, MappingType.Element);

                      base.Columns.Add(this.columnAge);

                      columnMale = new DataColumn("Male", typeof(bool), null, MappingType.Element);

                      base.Columns.Add(this.columnMale);

                      Constraints.Add(new UniqueConstraint("Constraint1", new DataColumn[] {

                                                                           columnName}, true));

                      columnName.AllowDBNull = false;

                      columnName.Unique = true;

                      columnName.MaxLength = 10;

                      columnAge.AllowDBNull = false;

                      columnMale.AllowDBNull = false;

         }

 

         // Å×À̺íÀÇ ¿­À» ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼ

         public DataColumn NameColumn {

                      get {

                                   return this.columnName;

                      }

         }

         ....

 

tblPeopleDataTableÀº DataTable·ÎºÎÅÍ ÆÄ»ýµÇ¹Ç·Î ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ Å×ÀÌºí ±â´ÉÀ» ±×´ë·Î ¹°·Á ¹Þ´Â´Ù. Å×À̺íÀ» ±¸¼ºÇÏ´Â ¿­Àº ÇÊµå ¸â¹ö·Î ¼±¾ðµÇ´Âµ¥ ¿­ÀÇ Á¾·ù´Â ½ºÅ°¸¶·ÎºÎÅÍ ÃßÃâÇÑ °ÍÀÌ´Ù. tblPeopleÀÇ Name, Age, Male ¼¼ °³ÀÇ Ä÷³ÀÌ DataColumn ŸÀÔÀÇ Çʵå·Î ¼±¾ðµÇ¾úÀ¸¸ç °¢ Ä÷³À» ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼµµ Á¤ÀǵǾî ÀÖ´Ù.

»ý¼ºÀÚ´Â Å×À̺íÀÇ À̸§À» ½ºÅ°¸¶ À̸§´ë·Î ´ëÀÔÇÏ°í InitClass¸¦ È£ÃâÇÏ¿© Å×À̺íÀ» ÃʱâÈ­ÇÑ´Ù. InitClass¿¡¼­ Å×À̺íÀÇ ±¸Á¶¿¡ ¸Â°Ô ¿­ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. Ä÷³º°·Î DataColumn »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© À̸§°ú ŸÀÔÀ» Á¤ÀÇÇÏ°í Columns Ä÷º¼Ç¿¡ Ãß°¡ÇÏ¸ç °¢ Ä÷³ÀÇ ³Î Çã¿ë, ÃÖ´ë ±æÀÌ, °íÀ¯°ª ¼Ó¼ºµµ ½ºÅ°¸¶´ë·Î Á¤ÀÇÇÑ´Ù. ¾Õ Àå¿¡¼­ ¸¸µé¾îº» MakeTable ¿¹Á¦¿Í À¯»çÇØ ÀÌÇØÇϱ⠽±´Ù. ¿©±â±îÁö »ý¼ºµÈ µ¥ÀÌÅÍ ÁýÇÕÀ» ±×·Á º¸ÀÚ.

DataSet, DataTable·ÎºÎÅÍ ÆÄ»ýµÈ °´Ã¼¿©¼­ ±â´É»ó Á¶±Ý È®ÀåµÇ¾î ÀÖÀ» »ÓÀÌÁö ÀüüÀûÀÎ ±¸Á¶´Â ¿ø·ÐÀ» ¹þ¾î³ªÁö ¾ÊÀ½À» ¾Ë ¼ö ÀÖ´Ù.

Çà Ŭ·¡½º

Å×À̺íÀÇ °¢ Çà¿¡ ´ëÇÑ Å¬·¡½ºµµ µû·Î ¼±¾ðµÇ¾î ÀÖ´Ù. Å×À̺í°ú ¸¶Âù°¡Áö·Î µ¥ÀÌÅÍ ÁýÇÕ¿¡ Æ÷ÇԵǴ °ÍÀ̹ǷΠÁßø Ŭ·¡½º·Î ¼±¾ðµÇ¾î ÀÖ´Ù. ÇàÀº ¿­ÀÇ ÁýÇÕÀÏ »ÓÀ̹ǷΠ±¸Á¶°¡ ºñ±³Àû °£´ÜÇÏ´Ù.

 

public partial class tblPeopleRow : DataRow {

 

         // ÇàÀ» Æ÷ÇÔÇÏ´Â Å×À̺í ÂüÁ¶ÀÚ.

         private tblPeopleDataTable tabletblPeople;

        

         // »ý¼ºÀÚ¿¡¼­ ÂüÁ¶ÀÚ ÃʱâÈ­

         internal tblPeopleRow(DataRowBuilder rb) :

                                   base(rb) {

                      tabletblPeople = ((tblPeopleDataTable)(Table));

         }

 

         // °¢ ¿­À» ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼ

         public string Name {

                      get {

                                   return ((string)(this[this.tabletblPeople.NameColumn]));

                      }

                      set {

                                   this[this.tabletblPeople.NameColumn] = value;

                      }

         }

         ....

 

DataRow·ÎºÎÅÍ ÆÄ»ýµÇ¸ç ¼Ò¼ÓµÈ Å×ÀÌºí¿¡ ´ëÇÑ ÂüÁ¶ÀÚ¸¦ ¸â¹ö·Î °¡Áø´Ù. »ý¼ºÀÚ´Â ¼Ò¼Ó Å×À̺íÀÇ ÂüÁ¶ÀÚ¸¦ ÃʱâÈ­Çϴµ¥ internal·Î ¼±¾ðµÇ¾î ÀÖ¾î ¿ÜºÎ¿¡¼­ È£ÃâÇÏÁö ¸øÇÑ´Ù. ÇàÀ» ±¸¼ºÇÏ´Â ¿­Àº ¼Ò¼Ó Å×À̺íÀÇ ¿­ Çʵ带 ÀÐ¾î ¸®ÅÏÇÏ´Â ÇÁ·ÎÆÛƼ·Î Á¤ÀÇÇÑ´Ù. ¿­ÀÇ Å¸ÀÔ¿¡ ¸Â°Ô ij½ºÆõǾî ÀÖ¾î ŸÀÔ Á¶ÀÛ¾øÀÌ ¹Ù·Î ÀÐÀ» ¼ö ÀÖ´Ù.

35-2-3.Å×ÀÌºí ¾î´ðÅÍ

Á» ´õ ¾Æ·¡·Î ³»·Á°¡ º¸¸é TableAdapter Ŭ·¡½º°¡ ¼±¾ðµÇ¾î ÀÖ´Ù. µ¥ÀÌÅÍ ÁýÇÕ, Å×À̺í, Çà Ŭ·¡½º´Â ¸ðµÎ ºñ¿¬°á »óÅ¿¡¼­ »ç¿ëÇÏ´Â °ÍÀ̾ ¼­¹ö¿Í Åë½ÅÇÏ·Á¸é ¾î´ðÅÍÀÇ µµ¿òÀÌ ÇÊ¿äÇÏ´Ù. ¾î´ðÅÍ´Â »ó±âÀÇ Å¬·¡½º¿Í ±â´ÉÀûÀ¸·Î È®¿¬ÇÏ°Ô ±¸ºÐµÇ°í ±¸Á¶µµ º¹ÀâÇϹǷΠº°µµÀÇ ³×ÀÓ½ºÆäÀ̽º¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

Å×ÀÌºí ¾î´ðÅÍ´Â ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ DataAdapter Ŭ·¡½º¿¡ ´ëÇÑ ·¡ÆÛÀÌ´Ù. °ø±ÞÀÚº°·Î µ¥ÀÌÅÍ ¾î´ðÅÍ(SqlDataAdapter µî)°¡ µû·Î ÀÖ°í ¸¶¹ý»ç´Â À̸¦ ·¡ÇÎÇÏ´Â Å×ÀÌºí ¾î´ðÅ͸¦ Á¦°øÇÑ´Ù. Å×À̺í´ç Çϳª¾¿ Å×ÀÌºí ¾î´ðÅÍ°¡ »ý¼ºµÇ¸ç Ŭ·¡½º À̸§Àº Å×À̺í¸í+TableAdapter ½ÄÀ¸·Î ºÙ¿©Áø´Ù. ÀÌ ¿¹Á¦ÀÇ °æ¿ì tblPeopleTableAdapter¶ó´Â À̸§À» °¡Áö´Âµ¥ ÅëĪÇÏ¿© TableAdapter¶ó°í ºÎ¸¥´Ù.

TableAdapter´Â µðÀÚÀ̳ʿ¡ ÀÇÇØ »ý¼ºµÇ´Â »ç¿ëÀÚ Á¤ÀÇ Å¬·¡½ºÀÌ¸ç ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ ±¸¼º ¿ä¼Ò°¡ ¾Æ´Ï¹Ç·Î ·¹ÆÛ·±½º¸¦ ¾Æ¹«¸® µÚÁ®µµ ³ª¿ÀÁö ¾Ê´Â´Ù. Å×ÀÌºí ¾î´ðÅ͸¦ Á¤ÀÇÇÏ´Â ¼Ò½º¸¦ º¸ÀÚ.

 

public partial class tblPeopleTableAdapter : Component {

        

         // Æ÷ÇÔµÈ °´Ã¼µé

         private SqlDataAdapter _adapter;

         private SqlConnection _connection;

         private SqlTransaction _transaction;

         private SqlCommand[] _commandCollection;

         private bool _clearBeforeFill;

 

         // »ý¼ºÀÚ

         public tblPeopleTableAdapter() {

                      this.ClearBeforeFill = true;

         }

 

         // Æ÷ÇÔµÈ °´Ã¼¿¡ ´ëÇÑ ÇÁ·ÎÆÛƼ ¼±¾ð

         private SqlDataAdapter Adapter {

                      get {

                                   if ((this._adapter == null)) {

                                                 this.InitAdapter();

                                   }

                                   return this._adapter;

                      }

         }

        

         internal SqlConnection Connection {

                      get { ... }

                      set { ... }

         }

        

         internal SqlTransaction Transaction{

                      get { ... }

                      set { ... }

         }

 

         protected System.Data.SqlClient.SqlCommand[] CommandCollection {

                      get {

                                   if ((this._commandCollection == null)) {

                                                 this.InitCommandCollection();

                                   }

                                   return this._commandCollection;

                      }

         }

 

         public bool ClearBeforeFill {

                      get {

                                   return this._clearBeforeFill;

                      }

                      set {

                                   this._clearBeforeFill = value;

                      }

         }

 

         private void InitAdapter() {

                      _adapter = new SqlDataAdapter();

                      ....

                      _adapter.DeleteCommand = new SqlCommand();

                      _adapter.DeleteCommand.Connection = Connection;

                      _adapter.DeleteCommand.CommandText = "DELETE ...

                      ....

                      _adapter.InsertCommand.CommandText = "INSERT INTO ...

                      ....

                      _adapter.UpdateCommand.CommandText = "UPDATE ...

                      ....

         }

 

         private void InitConnection() {

                      _connection = new SqlConnection();

                      _connection.ConnectionString = Settings.Default.ADOTestConnectionString;

         }

 

         private void InitCommandCollection() {

                      _commandCollection = new System.Data.SqlClient.SqlCommand[1];

                      _commandCollection[0] = new System.Data.SqlClient.SqlCommand();

                      _commandCollection[0].Connection = this.Connection;

                      _commandCollection[0].CommandText = "SELECT Name, Age, Male FROM tblPeople";

                      _commandCollection[0].CommandType = CommandType.Text;

         }

 

         public virtual int Fill(ADOTestDataSet.tblPeopleDataTable dataTable) {

                      Adapter.SelectCommand = CommandCollection[0];

                      if ((ClearBeforeFill == true)) {

                                   dataTable.Clear();

                      }

                      int returnValue = Adapter.Fill(dataTable);

                      return returnValue;

         }

 

         public virtual ADOTestDataSet.tblPeopleDataTable GetData() {

                      Adapter.SelectCommand = CommandCollection[0];

                      tblPeopleDataTable dataTable = new tblPeopleDataTable();

                      Adapter.Fill(dataTable);

                      return dataTable;

         }

 

         public virtual int Update(ADOTestDataSet.tblPeopleDataTable dataTable) {

                      return Adapter.Update(dataTable);

         }

 

Ŭ·¡½º ¼±¾ð¹®¿¡¼­ Á¦ÀÏ ´«¿©°Ü º¼ °ÍÀº ±â¹Ý Ŭ·¡½º°¡ Component·Î µÇ¾î ÀÖ´Ù´Â Á¡ÀÌ´Ù. µ¥ÀÌÅÍ ¾î´ðÅͷκÎÅÍ »ó¼Ó¹Þ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸â¹ö·Î Æ÷ÇÔÇÑ´Ù. °´Ã¼ÁöÇâÀÇ ÄÚµå Àç»ç¿ë ±â¹ýÀº »ó¼Ó, Æ÷ÇÔ µÎ °¡Áö°¡ Àִµ¥ Å×ÀÌºí ¾î´ðÅÍ´Â Æ÷ÇÔ ±â¹ýÀ» ¾´´Ù. µ¥ÀÌÅÍ ¾î´ðÅÍÀÇ ¸ðµç ±â´ÉÀ» Á¦°øÇÔÀº ¹°·ÐÀÌ°í Ãß°¡ ¸Þ¼­µå¿Í ÇÁ·ÎÆÛƼµµ Á¦°øÇÑ´Ù.

¸â¹ö ¼±¾ð¹®À» º¸¸é SqlDataAdapter ŸÀÔÀÇ _adapter ¸â¹ö°¡ ¼±¾ðµÇ¾î Àִµ¥ ÀÌ°ÍÀÌ Æ÷ÇÔ °´Ã¼ÀÌ´Ù. µ¥ÀÌÅÍ °ø±ÞÀÚ°¡ OLE DB¿´´Ù¸é OleDbDataAdapter ŸÀÔÀ¸·Î ¼±¾ðµÈ´Ù. ¾î´ðÅÍ ¿Ü¿¡µµ ¿¬°á°ú ¸í·É °´Ã¼°¡ Æ÷ÇԵǾî ÀÖ´Ù. °á±¹ TableAdapter´Â ÀÀ¿ë ÇÁ·Î±×·¥°ú µ¥ÀÌÅͺ£À̽º°£ÀÇ Åë½Å¿¡ ÇÊ¿äÇÑ ¿¬°á, ¸í·É, µ¥ÀÌÅÍ ¾î´ðÅÍ, Æ®·£Àè¼ÇÀ» ·¡ÇÎÇϴ Ŭ·¡½ºÀÌ´Ù.

ClearBeforeFill À̶ó´Â °íÀ¯ÀÇ Ãß°¡ ÇÁ·ÎÆÛƼ°¡ Á¤ÀǵǾî Àִµ¥ ÀÌ ÇÁ·ÎÆÛƼ´Â Fill ¸Þ¼­µå·Î µ¥ÀÌÅÍ ÁýÇÕÀ» ä¿ì±â Àü¿¡ ±âÁ¸ÀÇ µ¥ÀÌÅ͸¦ Áö¿ï °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­ÇÑ´ë·Î µðÆúÆ®´Â trueÀÌµÇ false·Î º¯°æÇÏ¿© Ãß°¡ ¶Ç´Â º´ÇÕÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·ÎÆÛƼ ¿Ü¿¡´Â »ý¼ºÀÚ°¡ Ưº°ÇÑ ÃʱâÈ­¸¦ ÇÏÁö ¾Ê´Âµ¥ ÁÖ¿ä ÃʱâÈ­´Â ¸ðµÎ Init* ¸Þ¼­µå¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù.

Å×ÀÌºí¿¡ Æ÷ÇÔµÈ °´Ã¼´Â °ø°³µÈ ÇÁ·ÎÆÛƼ·Î Á¦°øµÈ´Ù. ´ëÇ¥ÀûÀ¸·Î Adapter ÇÁ·ÎÆÛƼ¸¦ ºÐ¼®ÇØ º¸ÀÚ. ÀÌ ÇÁ·ÎÆÛƼ¿¡´Â get Á¢±ÙÀÚ¸¸ ÀÖ°í set Á¢±ÙÀÚ°¡ ¾ø´Â Àбâ Àü¿ëÀÌ´Ù. get Á¢±ÙÀÚ¿¡¼­ ºñ°ø°³ ÇʵåÀÎ _adapter¸¦ ¸®ÅÏÇ쵂 nullÀ̸é InitAdapter ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ÃʱâÈ­ÇÑ´Ù. ¾î´ðÅÍ°¡ ÇÊ¿äÇϱâ Àü±îÁö ÃʱâÈ­¸¦ ¿¬±âÇÏ¿© ±âµ¿ ¼Óµµ¸¦ ³ôÀδÙ. ³ª¸ÓÁö Connection, CommandCollection ÇÁ·ÎÆÛƼµµ ±¸Á¶´Â °ÅÀÇ µ¿ÀÏÇÏ´Ù.

Æ÷ÇÔµÈ °´Ã¼ÀÇ ÃʱâÈ­´Â Init* ¸Þ¼­µå°¡ ´ã´çÇÑ´Ù. InitAdapter ¸Þ¼­µå¿¡¼­ µ¥ÀÌÅÍ ¾î´ðÅ͸¦ »ý¼ºÇÏ°í ¼¼ °³ÀÇ ¸í·ÉÀ» ÃʱâÈ­ÇÑ´Ù. À§ ¼Ò½º ¸®½ºÆ®¿¡´Â °£·«ÇÏ°Ô Ç¥½ÃÇߴµ¥ ±²ÀåÈ÷ ±ä Äõ¸®¹®°ú ÆĶó¹ÌÅ͸¦ Á¤ÀÇÇÏ´Â Äڵ尡 µû¶ó¿Â´Ù. °á±¹Àº ¼¼ °³ÀÇ Äõ¸®¹®À» ÃʱâÈ­ÇÏ´Â °Í »ÓÀÌ´Ù. ¾îÂ÷ÇÇ ±â°è°¡ Äõ¸®¹®À» »ý¼ºÇÏ´Â °ÍÀ̹ǷΠCommandBuilder´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.

InitConnection ¸Þ¼­µå´Â SqlConnection °´Ã¼¸¦ »ý¼ºÇÏ°í ¿¬°á ¹®ÀÚ¿­À» ÀоîµéÀδÙ. ¿¬°á ¹®ÀÚ¿­ÀÌ ±¸¼º ÆÄÀÏ¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î ±¸¼º ÆÄÀÏÀ» Àоú´Âµ¥ ¸¶¹ý»ç¿¡¼­ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏÁö ¾Ê¾Ò´Ù¸é ¿¬°á ¹®ÀÚ¿­ÀÌ Çϵå ÄÚµùµÈ´Ù. InitCommandCollection ¸Þ¼­µå´Â ¸í·É Ä÷º¼ÇÀ» »ý¼ºÇÏµÇ Ã¹ ¹ø° ¸í·ÉÀ¸·Î tblPeopleÀÇ ¸ðµç Çʵ带 °¡Á®¿À´Â SELECT¹®À» ÀÛ¼ºÇÑ´Ù. ÀÌÈÄ Äõ¸® ±¸¼º ¸¶¹ý»ç¿¡¼­ Äõ¸®¹®À» Ãß°¡Çϸé ÀÌ Ä÷º¼ÇÀÌ È®ÀåµÈ´Ù. ÀÌ»óÀÇ µÎ ¸Þ¼­µåµµ InitAdapter¿Í ¸¶Âù°¡Áö·Î Áö¿¬µÈ ÃʱâÈ­ ±â¹ýÀ» »ç¿ëÇÑ´Ù.

Fill, GetData, Update ¸Þ¼­µå´Â µ¥ÀÌÅÍ ¾î´ðÅÍÀÇ µ¿ÀÏ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â Áß°è ¿ªÇÒÀ» ÇÒ »ÓÀÌ´Ù. ´Ù¸¸ Fill ¸Þ¼­µå¿¡ ClearBeforeFill ÇÁ·ÎÆÛƼ¸¦ Àû¿ëÇÏ´Â Äڵ尡 ´õ Ãß°¡µÇ¾î ÀÖ´Ù. Å×ÀÌºí ¾î´ðÅÍÀÇ ¿¬°á ¸â¹ö¿¡ ÀÇÇØ µ¥ÀÌÅÍ ¼Ò½º¿¡ ¿¬°áµÇ°í Fill ¸Þ¼­µå¿¡ ÀÇÇØ Å×À̺íÀÇ ³»¿ëÀÌ ÀÐÇôÁö¸ç Update ¸Þ¼­µå¿¡ ÀÇÇØ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÆíÁýÇÑ °á°ú¸¦ µ¥ÀÌÅÍ ¼Ò½º·Î ´Ù½Ã º¸³½´Ù.

35-2-4.DbDirect ¸í·É

Å×ÀÌºí ¾î´ðÅÍ´Â ¾Õ¿¡¼­ »ìÆ캻 ¸Þ¼­µå ¿Ü¿¡µµ 3°³ÀÇ ¸Þ¼­µå¸¦ Ãß°¡·Î ´õ °¡Áú ¼ö ÀÖ´Ù. ÄÚµå ¾Æ·¡ÂÊÀ» º¸¸é Insert, Delete, Update ¼¼ °³ÀÇ ¸Þ¼­µå°¡ Á¤ÀǵǾî Àִµ¥ DB¿¡ ¹Ù·Î Äõ¸® ¸í·ÉÀ» ³¯¸°´Ù. ¿É¼ÇÀ̹ǷΠ»ý¼ºµÉ ¼öµµ ÀÖ°í ¾Æ´Ò ¼öµµ Àִµ¥ ¸¶¹ý»ç´Â µðÆúÆ®·Î ÀÌ ¸Þ¼­µå¸¦ »ý¼ºÇÑ´Ù. TableAdapterÀÇ ¼Ó¼ºÃ¢¿¡¼­ GenerateDbDirectMethods ÇÁ·ÎÆÛƼ¸¦ false·Î ¹Ù²Ù¸é »ý¼ºÇÏÁö ¾Ê´Â´Ù.

°ú¿¬ ±×·±Áö Å×½ºÆ®ÇØ º¸ÀÚ. ¼Ö·ç¼Ç Ž»ö±â¿¡¼­ ADOTestDataSet.xsd ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¸é µ¥ÀÌÅÍ ÁýÇÕ µðÀÚÀ̳ʶó´Â °ÍÀÌ ¿­¸®¸ç µ¥ÀÌÅÍ ÁýÇÕ³»ÀÇ Å×À̺íÀÌ ±×·¡ÇÈÀ¸·Î ³ªÅ¸³­´Ù. ¾Æ·¡ ±×¸²Àº tblPeople Å×À̺í°ú ¾î´ðÅÍÀÇ ¸ð½ÀÀÌ´Ù. ¾Æ·¡ÂÊÀÇ Å×ÀÌºí ¾î´ðÅ͸¦ ¼±ÅÃÇØ ³õ°í ¼Ó¼ºÃ¢À» º¸¸é Å×ÀÌºí ¾î´ðÅÍÀÇ ÇÁ·ÎÆÛƼ ¸ñ·ÏÀÌ ³ªÅ¸³­´Ù.

 

GenerateDBDirectMethods¸¦ False·Î ¹Ù²Ù¾î º¸ÀÚ. ±×¸®°í ´Ù½Ã ÄÄÆÄÀÏÇÑ ÈÄ ADOTestDataSet.Designer.cs ÆÄÀÏÀ» ¿­¾î º¸¸é ¼¼ °³ÀÇ ¸Þ¼­µå°¡ ±ôÂʱùÀÌ »ç¶óÁø´Ù. ÀÌ ÇÁ·ÎÆÛƼ´Â ¸¶¹ý»ç¿¡°Ô DB Á÷Á¢ ½ÇÇà ¸Þ¼­µå¸¦ »ý¼ºÇÒ °ÍÀÎÁö¸¦ Áö½ÃÇÑ´Ù. °´Ã¼ ÀÚüÀÇ ¼±¾ð¹®¿¡ ÀÖ´Â ÇÁ·ÎÆÛƼ°¡ ¾Æ´Ï¶ó °³¹ßÅøÀÇ µ¿ÀÛÀ» Á¦¾îÇÑ´Ù´Â ¸é¿¡¼­ ƯÀÌÇÏ´Ù.

DBDirect ¸Þ¼­µå´Â µ¥ÀÌÅÍ ¼Ò½º¿¡ Á÷Á¢ ¿¬°áÇÏ¿© ¸í·ÉÀ» ½ÇÇàÇÑ´Ù. ´ëÇ¥ÀûÀ¸·Î Insert ¸Þ¼­µå¸¸ ºÐ¼®ÇØ º¸ÀÚ. ¾Õ Àå¿¡¼­ °ü·Ã Ŭ·¡½º¸¦ Á¦´ë·Î °øºÎÇß´Ù¸é ÀÌ ¸Þ¼­µåÀÇ ÄÚµå´Â ½±°Ô ºÐ¼®µÈ´Ù. ¾à°£ÀÇ ÁÖ¼®À» ´Þ¾ÒÀ¸¹Ç·Î Àо¸ç ºÐ¼®ÇØ º¸ÀÚ.

 

public virtual int Insert(string Name, int Age, bool Male) {

         // À̸§Àº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÑ´Ù.

         if ((Name == null)) {

                      throw new ArgumentNullException("Name");

         }

         else {

                      // ù ¹ø° ÆĶó¹ÌÅÍ¿¡ Àμö·Î Àü´ÞµÈ À̸§ ´ëÀÔ

                      Adapter.InsertCommand.Parameters[0].Value = ((string)(Name));

         }

         // µÎ ¹ø°, ¼¼ ¹ø° ÆĶó¹ÌÅÍ¿¡ ³ªÀÌ¿Í ¼ºº° ´ëÀÔ

         Adapter.InsertCommand.Parameters[1].Value = ((int)(Age));

         Adapter.InsertCommand.Parameters[2].Value = ((bool)(Male));

 

         // ¿¬°áµÇ¾î ÀÖÁö ¾ÊÀ¸¸é Áö±Ý ¿¬°áÇÑ´Ù.

         ConnectionState previousConnectionState = Adapter.InsertCommand.Connection.State;

         if (((Adapter.InsertCommand.Connection.State & ConnectionState.Open)

                                                 != ConnectionState.Open)) {

                      Adapter.InsertCommand.Connection.Open();

         }

         try {

                      // Äõ¸®¹®À» ½ÇÇàÇÑ´Ù.

                      int returnValue = Adapter.InsertCommand.ExecuteNonQuery();

                      return returnValue;

         }

         finally {

                      // ¿¬°áÀ» ÇØÁ¦ÇÑ´Ù.

                      if ((previousConnectionState == ConnectionState.Closed)) {

                                   Adapter.InsertCommand.Connection.Close();

                      }

         }

}

 

Å×ÀÌºí ¾î´ðÅÍ¿¡ Á¤ÀǵǾî ÀÖ´Â InsertCommand¸¦ ½ÇÇàÇ쵂 ÀÌ Äõ¸®¹®ÀÌ ¿ä±¸ÇÏ´Â ¼¼ °³ÀÇ ÆĶó¹ÌÅ͸¦ ¸Þ¼­µåÀÇ Àμö·Î Àü´Þ¹Þ¾Æ ´ëÀÔÇÑ´Ù. tblPeopleÀÌ ¼¼ °³ÀÇ Çʵå·Î ±¸¼ºµÇ¾î ÀÖÀ¸¹Ç·Î Insert ¸Þ¼­µåµµ ¼¼ °³ÀÇ Àμö¸¦ ¹Þ´Â´Ù. Äõ¸®¹® ½ÇÇàÀ» À§ÇÑ ¿¬°áµµ ÀÚüÀûÀ¸·Î °ü¸®ÇÑ´Ù. ÀÌ ¸Þ¼­µå·Î »õ ·¹Äڵ带 »ðÀÔÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ È£ÃâÇÑ´Ù.

 

tblPeopleTableAdapter.Insert("À±ÀºÇý", 24, true);

 

ÇʵåÀÇ Å¸ÀÔ¿¡ ²À ¸Â´Â Àμö¸¦ ÇÊµå °³¼ö¸¸Å­ ¹Þ¾Æ Äõ¸®¹®À» ½ÇÇàÇÑ´Ù. ÀÌ·± È£ÃâÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â ¾î´ðÅʹ ŸÀÔÀÌ Àֱ⠶§¹®ÀÌ´Ù. Á» º¹ÀâÇÑ ¾ê±âÀ̹ǷΠ´ÙÀ½ Àý¿¡¼­ »ó¼¼ÇÏ°Ô ¿¬±¸ÇØ º¸ÀÚ. ¸¶Áö¸·À¸·Î ¸¶¹ý»ç°¡ Æû¿¡ ÀÛ¼ºÇÑ Äڵ带 ºÐ¼®ÇØ º¸ÀÚ. µðÀÚÀ̳ʰ¡ ¸¸µç Æû ÆÄÀÏ¿¡´Â ´ÙÀ½ ¸â¹ö°¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

 

partial class Form1 {

         ....

         private ADOTestDataSet aDOTestDataSet;

         private BindingSource tblPeopleBindingSource;

         private tblPeopleTableAdapter tblPeopleTableAdapter;

         private TableAdapterManager tableAdapterManager;

         private BindingNavigator tblPeopleBindingNavigator;

         ....

         private DataGridView tblPeopleDataGridView;

         ....

}

 

±×¸®°í InitializeComponent ¸Þ¼­µå¿¡´Â ÀÌ °´Ã¼¸¦ »ý¼ºÇÏ°í ÃʱâÈ­ÇÏ´Â Äڵ尡 ÀÛ¼ºµÇ¾î ÀÖ´Ù. Form1_Load À̺¥Æ®¿¡¼­ ¾î´ðÅÍÀÇ Fill ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅÍ ÁýÇÕÀ» ä¿ì¸ç µ¥ÀÌÅÍ ÁýÇÕÀÇ ³»¿ëÀº ±×¸®µå¸¦ ÅëÇØ »ç¿ëÀÚ¿¡°Ô º¸¿©Áö´Â °ÍÀÌ´Ù.

35-2-5.°èÃþÀû ¾÷µ¥ÀÌÆ®

¸¶¹ý»ç°¡ »ý¼ºÇÑ ¸¶Áö¸· Ŭ·¡½ºÀÎ ¾î´ðÅÍ ¸Å´ÏÀú¿¡ ´ëÇØ °£·«ÇÏ°Ô ¾Ë¾Æº¸ÀÚ. ÀÌ Å¬·¡½º´Â ÂüÁ¶ ¹«°á¼ºÀ» ÁöÅ°´Â °èÃþÀû ¾÷µ¥ÀÌÆ®(Hierarchical Update) ±â´ÉÀ» À§ÇØ Ãß°¡µÈ °ÍÀÌ´Ù. Å×ÀÌºí ¾î´ðÅÍ¿Í °°Àº ³×ÀÓ½ºÆäÀ̽º¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç À̸§Àº TableAdapterManager·Î °íÁ¤µÇ¾î ÀÖ´Ù.

´ÜÀÏ Å×À̺íÀº ÀúÀåÇÒ ¶§ ÇàÀÇ »óÅ°ªÀ» ÂüÁ¶ÇÏ¿© º¯°æµÈ Çุ ÀûÀýÇÑ Äõ¸®¹®À» ½ÇÇàÇÏ¸é µÈ´Ù. °ü°è°¡ ÀÖ´Â º¹¼ö Å×À̺íÀº ÀúÀå ¼ø¼­¿¡ À¯ÀÇÇØ¾ß Çϴµ¥ ºÎ¸ð Å×À̺íÀ» ¸ÕÀú ÀúÀåÇØ¾ß ÀÚ½Ä Å×À̺íÀ» ÀúÀåÇÒ ¼ö ÀÖ´Ù. tblPeople°ú tblSaleÀÇ °æ¿ì ¾çÂÊ¿¡ »õ ÇàÀÌ Ãß°¡µÇ¾ú´Ù¸é °í°´ ·¹Äڵ带 ¸ÕÀú »ðÀÔÇÏ°í ±¸ÀÔ ³»¿ªÀ» »ðÀÔÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ±¸ÀÔ ³»¿ªÀÌ ¸ÕÀú ÀúÀåµÇ¾î ÀϽÃÀûÀ¸·Î ¹«°á¼ºÀÌ ±úÁö¸ç ÀÌ ÂªÀº ¼ø°£¿¡µµ ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù.

±×·¡¼­ °ü°è°¡ ¼³Á¤µÈ Å×À̺íÀº ¼ø¼­¿¡ ¸Â°Ô ÀúÀå ¹× ¼öÁ¤ÇØ¾ß Çϴµ¥ ÀÌ ±ÍÂúÀº ÀÛ¾÷À» ´ë½ÅÇØ ÁÖ´Â °ÍÀÌ ¾î´ðÅÍ ¸Å´ÏÀúÀÌ´Ù. ¾î´ðÅÍ ¸Å´ÏÀú´Â °ü°èÀÇ Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© ¼ø¼­¿¡ ¸Â°Ô ¾÷µ¥ÀÌÆ® ¸í·ÉÀ» ½ÇÇàÇÔÀ¸·Î½á ÀúÀåÁß¿¡µµ ¹«°á¼ºÀ» À¯ÁöÇÑ´Ù. ÀÌ·± ±â´ÉÀ» °èÃþÀû ¾÷µ¥ÀÌÆ®¶ó°í ÇÑ´Ù. °³³äÀÌ °£´ÜÇÏÁö¸¸ ¿Ö ÀÌ·± ±â´ÉÀÌ ÇÊ¿äÇÑÁö ¿¹Á¦¸¦ ¸¸µé¾î Å×½ºÆ®ÇØ º¸ÀÚ.

 

HiUpdate

 

HiUpdate ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÑ ÈÄ µ¥ÀÌÅÍ ¼Ò½º ¸¶¹ý»ç¸¦ ½ÇÇàÇÏ¿© ADOTest µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â µÎ °³ÀÇ Å×À̺íÀ» ¸ðµÎ Àоî¿Â´Ù.

Å×À̺íÀÌ Çϳª ´õ ´Ã¾î³ª¸é ¸¶¹ý»ç°¡ »ý¼ºÇÏ´Â Äڵ嵵 °ÅÀÇ µÎ ¹è·Î ´Ã¾î³­´Ù. Å×À̺í´ç ¾î´ðÅÍ¿Í Çà ·¹Äڵ尡 Çϳª¾¿ »ý¼ºµÇ±â ¶§¹®ÀÌ´Ù. µ¥ÀÌÅÍ ¼Ò½ºÃ¢À» º¸¸é µÎ °³ÀÇ Å×À̺íÀÌ ³ª¶õÈ÷ µî·ÏµÇ¾î ÀÖ´Ù. µ¥ÀÌÅÍ ¼Ò½ºÃ¢¿¡¼­ tblPeople Å×À̺íÀ» ÆûÀ¸·Î µå·¡±×ÇØ º¸ÀÚ.

Æû¿¡´Â ±×¸®µå¿Í ³×ºñ°ÔÀÌÅÍ°¡ ³ªÅ¸³ª°í Æ®·¹ÀÌ¿¡´Â ¾î´ðÅÍ ¸Å´ÏÀúµµ ¹èÄ¡µÈ´Ù. ´ÙÀ½À¸·Î tblSale Å×À̺íÀ» ÆûÀ¸·Î µå·¡±×ÇÏ¿© ±×¸®µå·Î Ãâ·ÂÇÑ´Ù. ±×¸®°í Å×½ºÆ®¸¦ À§ÇÑ ¹öÆ° Çϳª¸¦ btnUpdate¶ó´Â À̸§À¸·Î ¹èÄ¡ÇÏ°í µÎ Å×À̺íÀ» ÀúÀåÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

private void btnUpdate_Click(object sender, EventArgs e) {

         tblPeopleTableAdapter.Update(aDOTestDataSet.tblPeople);

         tblSaleTableAdapter.Update(aDOTestDataSet.tblSale);

}

 

Å×ÀÌºí¸¶´Ù ¾î´ðÅÍ°¡ µû·Î »ý¼ºµÇ¹Ç·Î °¢ ¾î´ðÅÍÀÇ Update ¸Þ¼­µå¸¸ È£ÃâÇÏ¸é µÈ´Ù. ÀÌ »óÅ¿¡¼­ ½ÇÇàÇØ º¸¸é µÎ °³ÀÇ Å×À̺íÀÌ µ¿½Ã¿¡ º¸ÀδÙ.

 

°¢°¢ÀÇ ±×¸®µå¿¡¼­ µÎ Å×À̺íÀ» °³º°ÀûÀ¸·Î ÆíÁýÇÒ ¼ö ÀÖµÇ ´Ü, µÎ Å×À̺íÀº ¿Ü·¡Å° Á¦¾àÀ» ¾î±âÁö ¾Ê´Â ¹üÀ§¿¡¼­¸¸ ÆíÁýÇØ¾ß ÇÑ´Ù. ±èÅÂÈñ¸¦ Áö¿ö ¹ö¸°´Ù°Å³ª Á¤¿ì¼ºÀÇ À̸§À» ¹Ù²Û »óÅ¿¡¼­ ÀúÀåÇÏ¸é ¿Ü·¡Å° Á¦¾àÀ» ¾î°å´Ù´Â ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. 22¼¼ÀÇ ¹Ú½Å¾ç û³âÀÌ Æĸ®Ã¤¸¦ ±¸ÀÔÇÑ °ÍÀ¸·Î ±â·ÏÇØ º¸ÀÚ.

°í°´ ±×¸®µå¿¡ ¹Ú½Å¾çÀ» ÀÔ·ÂÇÏ°í ±¸ÀÔ ³»¿ª ±×¸®µå¿¡ Æĸ®Ã¤¸¦ ±â·ÏÇß´Ù. ±¸ÀÔ ³»¿ª Å×À̺íÀÇ ¹Ú½Å¾çÀÌ °í°´ Å×ÀÌºí¿¡ ¸ÕÀú »ðÀԵǾúÀ¸¹Ç·Î ¹«°á¼º¿¡ ¹®Á¦°¡ ¾ø´Ù. Update ¹öÆ°À» ´©¸£¸é µÎ Å×À̺íÀÌ ¼ø¼­´ë·Î Àß ÀúÀåµÈ´Ù. ±×·¯³ª ÀúÀå ¼ø¼­¸¦ ¹Ù²Ù¸é ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù.

 

private void btnUpdate_Click(object sender, EventArgs e) {

         tblSaleTableAdapter.Update(aDOTestDataSet.tblSale);

         tblPeopleTableAdapter.Update(aDOTestDataSet.tblPeople);

}

 

ÀÌ Äڵ忡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â ÀÌÀ¯´Â ±¸ÀÔ ³»¿ª Å×ÀÌºí¿¡ Æĸ®Ã¤¸¦ »ðÀÔÇÒ ½ÃÁ¡¿¡´Â ¹Ú½Å¾çÀÌ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¹°·Ð Àá½Ã ÈÄ¿¡ tblPeopleÀ» ÀúÀåÇÏ¸é ¿ÏÀüÇÑ µ¥ÀÌÅÍ°¡ µÇ°ÚÁö¸¸ ÀϽÃÀûÀ¸·Î³ª¸¶ ¹«°á¼ºÀÌ ±úÁ³±â ¶§¹®¿¡ ¼­¹ö´Â ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°°í ÀÌ ÀúÀåÀ» Çã¶ôÇÏÁö ¾Ê´Â´Ù. ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ºÎ¸ð Å×À̺íÀ» ¸ÕÀú ÀúÀåÇÏ°í ÀÚ½Ä Å×À̺íÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. ÀúÀå ¼ø¼­¸¦ ¿ø·¡´ë·Î ¹Ù²Ù¸é ¹®Á¦´Â ÇØ°áµÈ´Ù.

±×·¯³ª ¾ÆÁ÷ ¹®Á¦°¡ ÀÖ´Ù. ¿ø·¡ ÄÚµå·Î ¹Ù²Û »óÅ¿¡¼­ À̹ø¿¡´Â ¹Ú½Å¾ç °í°´°ú Æĸ®Ã¤ ±¸ÀÔ ³»¿ªÀ» »èÁ¦ÇÑ ÈÄ ÀúÀåÇØ º¸ÀÚ. ¿ª½Ã ¶È°°Àº ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¿Ö³ÄÇÏ¸é ºÎ¸ð Å×À̺íÀÇ °í°´ÀÌ ¸ÕÀú »èÁ¦µÇ°í ±¸ÀÔ ³»¿ªÀÌ À̾ »èÁ¦µÇ¹Ç·Î ÀϽÃÀûÀ¸·Î ¹«°á¼ºÀÌ ±úÁö´Â ¶È°°Àº ¹®Á¦°¡ »ý±â±â ¶§¹®ÀÌ´Ù. À̶§´Â ÀÚ½Ä Å×À̺íÀ» ¸ÕÀú ÀúÀåÇÏ°í ºÎ¸ð Å×À̺íÀ» ³ªÁß¿¡ ÀúÀåÇØ¾ß ÇÑ´Ù. ±ÔÄ¢Àº ¾ÆÁÖ °£´ÜÇѵ¥ ÀϽÃÀûÀ¸·Î³ª¸¶ °ü°è¸¦ À§¹ÝÇÏ´Â ·¹Äڵ尡 ¾øµµ·Ï ÀúÀå ¼ø¼­¸¦ Àß Á¶Á¤ÇÏ¸é µÈ´Ù.

°ü°è¸¦ ±¸¼ºÇÏ´Â Å×À̺íÀÌ µÎ °³ »ÓÀ̶ó¸é ¾îÂî ¾îÂî ¼ø¼­¸¸ Àß Á¶Á¤ÇÏ¸é µÇ°ÚÁö¸¸ ¿©·¯ °³ÀÇ Å×À̺íÀÌ º¹ÀâÇÑ °ü°è¸¦ ÀÌ·ç°í ÀÖ°í »ðÀÔ »Ó¸¸ ¾Æ´Ï¶ó ¼öÁ¤À̳ª »èÁ¦µµ °°ÀÌ °í·ÁÇÏÀÚ¸é Á¤È®ÇÑ ¼ø¼­¸¦ Àâ±â ¾î·Æ´Ù. »ç¿ëÀÚÀÇ Á¶ÀÛ ¼ø¼­´ë·Î ¸í·ÉÀ» ¼öÇàÇÏ¸é µÇÁö¸¸ »ó´çÈ÷ ±ÍÂúÀº ÀÏÀÓÀº ºÐ¸íÇÏ´Ù. ÀÌ·± ÀÛ¾÷À» ´ë½ÅÇØ ÁÖ´Â °ÍÀÌ ¹Ù·Î ¾î´ðÅÍ ¸Å´ÏÀúÀÌ´Ù. ¸Å´ÏÀúÀÇ UpdateAll ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é ¸ðµç °ÍÀÌ ¼ø¼­¿¡ ¸Â°Ô 󸮵ȴÙ.

 

private void btnUpdate_Click(object sender, EventArgs e) {

         this.tableAdapterManager.UpdateAll(this.aDOTestDataSet);

}

 

ÀÌ ÄÚµå´Â ÀÌ¹Ì ³×ºñ°ÔÀÌÅÍÀÇ ÀúÀå ¹öÆ°¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù. À¯È¿¼º Á¡°Ë°ú ÆíÁýÁßÀÎ ·¹ÄÚµåÀÇ ÆíÁý Á¾·á±îÁö 󸮵Ǿî ÀÖ¾î ÆíÁýÇÑ ¸ðµç ·¹Äڵ尡 Àß ÀúÀåµÈ´Ù.

 

private void tblPeopleBindingNavigatorSaveItem_Click(object sender, EventArgs e) {

         this.Validate();

         this.tblPeopleBindingSource.EndEdit();

         this.tableAdapterManager.UpdateAll(this.aDOTestDataSet);

}

 

±×·¸´Ù¸é ¾î´ðÅÍ ¸Å´ÏÀú´Â °ú¿¬ ¾î¶»°Ô ÀÛ¼ºµÇ¾î ÀÖ´ÂÁö µðÀÚÀ̳ʰ¡ ¸¸µç ¼Ò½º ÆÄÀÏÀ» º¸ÀÚ. ¾î´ðÅÍ Å¬·¡½º ´ÙÀ½¿¡ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÈ Ŭ·¡½º¸¦ º¼ ¼ö ÀÖ´Ù.

 

public partial class TableAdapterManager : global::System.ComponentModel.Component {

         private UpdateOrderOption _updateOrder;

         private tblPeopleTableAdapter _tblPeopleTableAdapter;

         private tblSaleTableAdapter _tblSaleTableAdapter;

         private bool _backupDataSetBeforeUpdate;

         private global::System.Data.IDbConnection _connection;

 

         public virtual int UpdateAll(ADOTestDataSet dataSet) {

                      ....

         }

 

Component·ÎºÎÅÍ ÆÄ»ýµÇ´Â TableAdapterManager Ŭ·¡½ºÀ̸ç ÀÌ ¾È¿¡ °¢ Å×À̺íÀÇ ¾î´ðÅÍ¿Í ¿¬°áÀÌ ¸â¹ö·Î Æ÷ÇԵǾî ÀÖ°í °èÃþÀû ¾÷µ¥ÀÌÆ®¸¦ ¼öÇàÇÏ´Â UpdateAll ¸Þ¼­µåµµ Á¤ÀǵǾî ÀÖ´Ù. UpdateAll ¸Þ¼­µåÀÇ ½ÇÁ¦ ÄÚµå´Â µðÀÚÀ̳ʰ¡ ¸¸µç ¼Ò½º ÆÄÀÏ¿¡¼­ º¼ ¼ö Àִµ¥ Æ®·£Àè¼ÇÀ¸·Î ¸ðµç ¾÷µ¥ÀÌÆ®¸¦ °¨½Î¸ç º¯°æµÈ ÇàÀ» ¼öÁýÇÏ°í ½ºÅ°¸¶ Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© ¼ø¼­¿¡ ¸Â°Ô È£ÃâÇÑ´Ù.

¸¶¹ý»çÀÇ Äڵ带 ÀÐ¾î º¸¸é ´ëÃæ ¾î¶² ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ¾î ÀÚ¼¼ÇÑ ¼Ò½º ºÐ¼®Àº »ý·«ÇÑ´Ù. °³¿ä¸¸ ¾Ë°í ÀÖÀ¸¸é ±»ÀÌ ³»ºÎ ÄÚµå±îÁö µé¿©´Ù º¼ ÇÊ¿ä´Â ¾ø´Ù. ¾î´ðÅÍ ¸Å´ÏÀú´Â ¸¶¹ý»ç°¡ »ý¼ºÇÏ´Â »ç¿ëÀÚ Á¤ÀÇ Å¬·¡½ºÀ̹ǷΠ¿ª½Ã ·¹ÆÛ·±½º¿¡´Â ±â·ÏµÇ¾î ÀÖÁö ¾Ê´Ù. ´å³Ý ÇÁ·¹ÀÓ¿öÅ©°¡ Á¤ÀÇÇϴ Ŭ·¡½º´Â ¾Æ´ÏÁö¸¸ µ¥ÀÌÅÍ ÁýÇÕ µðÀÚÀ̳ʸ¦ ÅëÇØ µÎ °³ÀÇ ÇÁ·ÎÆÛƼ¸¦ µðÀÚÀΠŸÀÓ¿¡ ÆíÁýÇÒ ¼ö ÀÖ´Ù.

 

l BackupDataSetBeforeUpdate : ÀúÀåÇÒ ¶§ Æ®·£Àè¼Ç ´ë½Å ¹é¾÷À» »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. µðÆúÆ®´Â false¿©¼­ Æ®·£Àè¼ÇÀ» ¾²¸ç ·Ñ¹éÇϸé Áß°£¿¡ ¿¡·¯°¡ ¹ß»ýÇصµ ¿ø·¡´ë·Î µ¹¸± ¼ö ÀÖ´Ù. ±×·¯³ª Æ®·£Àè¼Ç¸¸À¸·Î ±ò²ûÇÏ°Ô ¿ø»ó º¹±¸°¡ µÇÁö ¾Ê´Â °æ¿ì°¡ Àִµ¥ ´ëÇ¥ÀûÀÎ °æ¿ì°¡ ÀÚµ¿ Áõ°¡¿­ÀÌ´Ù. »ðÀÔÇÑ ÈÄ Ãë¼ÒÇÏ´õ¶óµµ °è¼Ó Áõ°¡Çϵµ·Ï µÇ¾î ÀÖ¾î ·Ñ¹é¸¸À¸·Î´Â Áõ°¡°ª±îÁö º¹¿øÇÒ ¼ö ¾ø´Âµ¥ ÀÌ·± °æ¿ì Æ®·£Àè¼Ç ´ë½Å ¾÷µ¥ÀÌÆ® Àü¿¡ Àüü µ¥ÀÌÅÍ ÁýÇÕÀ» ¹é¾÷ÇØ ³õ°í ½ÇÆнà ¹é¾÷À¸·Î º¹¿øÇÑ´Ù.

l UpdateOrder : Insert, Update, Delete ¸í·ÉÀÇ ½ÇÇà ¼ø¼­¸¦ °áÁ¤ÇÑ´Ù. Delete´Â Ç×»ó Á¦ÀÏ ³¡À̸ç ÁÖ·Î Insert¿Í UpdateÀÇ ¼ø¼­¸¦ ÅëÁ¦Çϴµ¥ µðÆúÆ®´Â Insert ¸í·ÉÀ» ¸ÕÀú ½ÇÇàÇÏ´Â °ÍÀ¸·Î µÇ¾î ÀÖ´Ù. À§ ¿¹Á¦Ã³·³ ·¹Äڵ带 »ðÀÔ¸¸ ÇÏ´Â °æ¿ì¿¡´Â ¼ø¼­¿¡ Å« Àǹ̰¡ ¾øÁö¸¸ ·¹ÄÚµåÀÇ ±âº»Å°¸¦ ¾÷µ¥ÀÌÆ®ÇÏ°í ¾÷µ¥ÀÌÆ®µÈ °ªÀ» ÂüÁ¶ÇÏ´Â ·¹Äڵ带 »ðÀÔÇÏ´Â °æ¿ì¶ó¸é Update¸¦ ¸ÕÀú ó¸®ÇØ¾ß ÇÑ´Ù.

 

µ¥ÀÌÅÍ ÁýÇÕ¿¡ HierarchicalUpdate ÇÁ·ÎÆÛƼ°¡ ÀÖ¾î ÀÌ ±â´ÉÀ» »ç¿ëÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¸¶¹ý»ç°¡ ¸¸µç ÄÚµå´Â µðÆúÆ®·Î ÀÌ ±â´ÉÀ» »ç¿ëÇϴµ¥ °ü°è°¡ º¹ÀâÇÏÁö ¾Ê°Å³ª ¼öÀÛ¾÷À¸·Î ¼ø¼­¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù¸é °èÃþÀû ¾÷µ¥ÀÌÆ® ±â´ÉÀ» Á¦°ÅÇÒ ¼öµµ ÀÖ´Ù.