ÀÌ Àý¿¡¼´Â ¸¶¹ý»ç°¡ ÀÛ¼ºÇÑ ¼Ò½º¸¦ ºÐ¼®ÇØ º¸ÀÚ. ¸¶¹ý»ç°¡ ÇÁ·ÎÁ§Æ®¿¡
¹«½¼ Áþ°Å¸®¸¦ ÇØ ³õ¾Ò´ÂÁö ¿¬±¸ÇØ º¸¸é 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 ÆÄÀÏÀÌ »ý¼ºµÇ¸ç ÀÌ ÆÄÀÏÀÌ ºÐ¼® ´ë»óÀÌ´Ù. ÀÌ
ÆÄÀÏ¿¡ ÀÛ¼ºµÈ Äڵ忡 ÀÇÇØ Å×À̺íÀÌ ÀÐÇôÁø´Ù.
µðÀÚÀ̳ʰ¡ »ý¼ºÇÑ 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½ºÆõǾî ÀÖ¾î ŸÀÔ Á¶ÀÛ¾øÀÌ ¹Ù·Î ÀÐÀ» ¼ö ÀÖ´Ù.
Á» ´õ ¾Æ·¡·Î ³»·Á°¡ º¸¸é 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 ¸Þ¼µå¿¡ ÀÇÇØ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÆíÁýÇÑ °á°ú¸¦ µ¥ÀÌÅÍ ¼Ò½º·Î ´Ù½Ã º¸³½´Ù.
Å×ÀÌºí ¾î´ðÅÍ´Â ¾Õ¿¡¼ »ìÆ캻 ¸Þ¼µå ¿Ü¿¡µµ 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 ¸Þ¼µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅÍ ÁýÇÕÀ» ä¿ì¸ç µ¥ÀÌÅÍ ÁýÇÕÀÇ ³»¿ëÀº ±×¸®µå¸¦ ÅëÇØ »ç¿ëÀÚ¿¡°Ô º¸¿©Áö´Â °ÍÀÌ´Ù.
¸¶¹ý»ç°¡ »ý¼ºÇÑ ¸¶Áö¸· Ŭ·¡½ºÀÎ ¾î´ðÅÍ ¸Å´ÏÀú¿¡ ´ëÇØ °£·«ÇÏ°Ô ¾Ë¾Æº¸ÀÚ. ÀÌ
Ŭ·¡½º´Â ÂüÁ¶ ¹«°á¼ºÀ» ÁöÅ°´Â °èÃþÀû ¾÷µ¥ÀÌÆ®(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 ÇÁ·ÎÆÛƼ°¡ ÀÖ¾î ÀÌ
±â´ÉÀ» »ç¿ëÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¸¶¹ý»ç°¡ ¸¸µç ÄÚµå´Â µðÆúÆ®·Î ÀÌ ±â´ÉÀ» »ç¿ëÇϴµ¥ °ü°è°¡
º¹ÀâÇÏÁö ¾Ê°Å³ª ¼öÀÛ¾÷À¸·Î ¼ø¼¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù¸é °èÃþÀû ¾÷µ¥ÀÌÆ® ±â´ÉÀ» Á¦°ÅÇÒ ¼öµµ ÀÖ´Ù.