34-2.µ¥ÀÌÅÍ ÁýÇÕ °ü¸®

34-2-1.µ¿½Ã¼º ¹®Á¦

µ¥ÀÌÅÍ ÁýÇÕ(DataSet)Àº ¼­¹öÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿Í ÆíÁýµÈ ³»¿ëÀ» Á¤È®ÇÏ°Ô ¹Ý¿µÇÏ¿© ¼­¹ö·Î ÀçÀü¼ÛÇÑ´Ù. ¼­¹ö¿Í ¿¬°áÀÌ ²÷¾îÁø »óÅÂ¶óµµ Á¾·á Á÷Àü¿¡ µ¿±âÈ­¸¸ Á¦´ë·Î ÇÏ¸é ¹®Á¦°¡ ¾øÀ¸¸ç ºñ¿¬°áÇüÀ¸·Î ÈǸ¢ÇÏ°Ô µ¿ÀÛÇÑ´Ù. ±×·¯³ª ºñ¿¬°áÇüÀÇ ÀÌ·± Á¤È®¼ºÀº È¥ÀÚ¼­ ¼­¹ö¸¦ µ¶Â÷ÁöÇÒ ¶§¸¸ È®º¸µÇ¸ç ¿©·¯ »ç¿ëÀÚ°¡ ¼­¹öÀÇ µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. ÀÌ°ÍÀ» µ¿½Ã¼º ¹®Á¦¶ó°í Çϴµ¥ ¾î¶² ¹®Á¦°¡ ÀÖ´ÂÁö Å×½ºÆ®ÇØ º¸ÀÚ.

DataAdapterTest ¿¹Á¦¿¡¼­ Àб⠹öÆ°À» ´©¸£¸é ¾î´ðÅÍ¿¡ ÀÇÇØ ¼­¹öÀÇ tblPeople Å×À̺íÀÇ ³»¿ëÀÌ ÀÐÇôÁö¸ç ±×¸®µå¿¡ Ãâ·ÂµÈ´Ù. ÀÌ »óÅ¿¡¼­ SQL ¼­¹ö¸¦ ½ÇÇàÇØ ³õ°í Äõ¸®Ã¢¿¡¼­ ADOTest DB¿¡ Á¢¼ÓÇØ º¸ÀÚ. Äõ¸®Ã¢µµ ÇϳªÀÇ Å¬¶óÀ̾ðÆ®À̹ǷΠÇÑ ¼­¹ö¿¡ µÎ ¸íÀÇ »ç¿ëÀÚ°¡ µ¿½Ã¿¡ Á¢¼ÓÇÑ °ÍÀÌ´Ù. SQL ¼­¹ö¸¦ ½ÇÇàÇϱ⠹ø°Å·Ó´Ù¸é DataAdapterTest ¿¹Á¦¸¦ µÎ ¹ø ½ÇÇàÇصµ È¿°ú´Â °°´Ù.

±×¸®µå¿¡¼­ ¹è¿ëÁØÀÇ À̸§À» ¿æ»ç¸¶·Î ¼öÁ¤ÇÏ¸é º°´Ù¸¥ ¹®Á¦¾øÀÌ Àß ¼öÁ¤µÈ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ µ¥ÀÌÅÍ ÁýÇÕ¸¸ ¼öÁ¤ÇßÀ» »Ó ¾ÆÁ÷ ¼­¹ö·Î´Â Àü¼ÛÇϱâ ÀüÀÌ´Ù. ÀÌ »óÅ¿¡¼­ SQL ¼­¹öÀÇ Äõ¸®Ã¢À¸·Î À̵¿ÇÏ¿© ´ÙÀ½ ¸í·ÉÀ» ¼öÇàÇÏ¿© ¹è¿ëÁØÀÇ À̸§À» °­ÁØ»óÀ¸·Î º¯°æÇÑ´Ù. Äõ¸®Ã¢Àº ¿¬°áÇüÀ¸·Î µ¿ÀÛÇϹǷΠÁï½Ã ·¹Äڵ带 ¼öÁ¤ÇÑ´Ù.

 

UPDATE tblPeople SET Name = '°­ÁØ»ó' WHERE Name = '¹è¿ëÁØ';

 

ÀÌ »óÅ¿¡¼­ ´Ù½Ã ¿¹Á¦·Î µ¹¾Æ°¡ ÀúÀå ¹öÆ°À» ´­·¯ ±×¸®µå¿¡¼­ ÆíÁýÇÑ °ÍÀ» ¼­¹ö·Î Àü¼ÛÇØ º¸ÀÚ. ´ÙÀ½ ¿¹¿Ü°¡ ¹ß»ýÇϸç Á¦´ë·Î ÀúÀåµÇÁö ¾Ê´Â´Ù.

¿Ö ÀÌ·± ¹®Á¦°¡ ¹ß»ýÇÏ´ÂÁö Ŭ¶óÀ̾ðÆ® ÄÚµåÀÇ µ¿ÀÛÀ» ÃßÀûÇØ º¸ÀÚ. Update ¸Þ¼­µå´Â µ¥ÀÌÅÍ ÁýÇÕÀÇ Å×À̺íÀ» ¼ø¼­´ë·Î Àоî ÁýµÈ ·¹Äڵ带 Á¶»çÇÏ¸ç ¹è¿ëÁØ ·¹ÄÚµåÀÇ À̸§ÀÌ ¿æ»ç¸¶·Î ÆíÁýµÈ °ÍÀ» ¹ß°ßÇÏ°í ´ÙÀ½ Äõ¸®¹®À» ½ÇÇàÇÑ´Ù.

 

UPDATE tblPeople SET Name = '¿æ»ç¸¶' WHERE Name = '¹è¿ëÁØ';

 

¼­¹ö´Â ÀÌ Äõ¸®¹®À» ½ÇÇàÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇÏ¸é ´Ù¸¥ »ç¿ëÀÚ¿¡ ÀÇÇØ ¹è¿ëÁØÀº ÀÌ¹Ì »ç¶óÁ® ¹ö·È°í °­ÁØ»ó¸¸ ³²¾Ò±â ¶§¹®ÀÌ´Ù. ´Ù¸¥ »ç¿ëÀÚÀÇ ÆíÁýÀ¸·Î ÀÎÇØ ¼­¹öÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿Ã ¶§¿Í ÇöÀç »óȲÀÌ ´Þ¶óÁ® ¾÷µ¥ÀÌÆ®ÇÒ ´ë»óÀÌ »ç¶óÁ® ¹ö·È´Ù. ÀÌ°ÍÀÌ ¹Ù·Î µ¿½Ã¼ºÀÇ ¹®Á¦ÀÌ´Ù. ¹Ý´ë·Î Çصµ ¸¶Âù°¡ÁöÀε¥ ¿¹Á¦¿¡¼­ ¿æ»ç¸¶·Î ¸ÕÀú ¹Ù²Ù°í SQL ¼­¹ö¿¡¼­ °­ÁØ»óÀ¸·Î ¹Ù²Ù¾îµµ ¸¶Âù°¡Áö °á°ú°¡ ³ª¿Â´Ù.

µ¥ÀÌÅͺ£À̽º´Â ¿ø·¡ ¿©·¯ »ç¿ëÀÚ°¡ °øÀ¯ÇÏ´Â °ÍÀε¥ ºñÇØ ADO.NETÀº µ¿½Ã Á¢¼Ó¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÏÁö ¸øÇÑ´Ù. ADO.NETÀº ³«°üÀû µ¿½Ã¼º Á¦¾î Á¤Ã¥À» »ç¿ëÇÏ¸ç ¶ôÀ» °ÉÁö ¾Ê¾Æ ´Ù¸¥ »ç¿ëÀÚ°¡ ¼öÁ¤ÇÏ´Â °ÍÀ» Çã¶ôÇÑ´Ù. ³²µéÀÌ ¹Ù²Ù°Å³ª ¸»°Å³ª ³«°üÀûÀ¸·Î ±×³É ³»¹ö·Á µÎ´Â °ÍÀÌ¸ç ±×·¯´Ù º¸´Ï ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.

¹Ý´ë °³³äÀº ºñ°üÀû µ¿½Ã¼º Á¦¾î¶ó°í Çϴµ¥ ÇÑ »ç¿ëÀÚ°¡ µ¥ÀÌÅ͸¦ ÀÐÀº ÈÄ ÀúÀåÇÒ ¶§±îÁö ¾Æ¹«µµ ÀÌ µ¥ÀÌÅ͸¦ ¾µ ¼ö ¾øµµ·Ï ¶ôÀ» °É¾î ¹ö¸®´Â °ÍÀÌ´Ù. ½±°Ô ¸»ÇØ "³»°¡ »ç¿ëÁßÀÎ µ¥ÀÌÅÍ´Â ¾Æ¹«µµ ¸ø °Çµå·Á"ÇÏ°í ¼±Æ÷ÇØ ³õ´Â °ÍÀÌ´Ù. ¶ôÀÌ °É¸° »óÅ¿¡¼­´Â ¾Æ¹«µµ ÀÌ µ¥ÀÌÅ͸¦ ¾µ ¼ö ¾øÀ¸¹Ç·Î ¹®Á¦°¡ ¹ß»ýÇÒ ¿©Áö°¡ ¾ø´Ù. ±×·¯³ª ƯÁ¤ µ¥ÀÌÅ͸¦ ÇÑ¸í¸¸ ¾µ ¼ö ÀÖ¾î µ¿½Ã¼ºÀÌ ¶³¾îÁö¹Ç·Î ªÀº ½Ã°£µ¿¾È¸¸ ¶ôÀ» °É¾î¾ß ÇÑ´Ù.

ADO.NETÀÇ ºñ¿¬°áÇü ¹æ½ÄÀº ¼­¹ö¿ÍÀÇ ¿¬°áÀÌ ¿ÏÀüÈ÷ ²÷±ä »óÅ¿¡¼­ µ¿ÀÛÇϱ⠶§¹®¿¡ ¶ôÀ» °É ¼ö ¾øÀ¸¸ç µû¶ó¼­ ºñ°üÀû µ¿½Ã¼º Á¦¾î¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¼­¹ö¿¡ ¿¬°áµµ ÇÏÁö ¾ÊÀº »óÅÂÀ̹ǷΠ´©°¡ ¹» ¾î¶»°Ô ¹Ù²Ùµç Âü°ßÇÒ ¿©Áö°¡ ¾ø°í ±×·¸´Ù º¸´Ï »çº»À» ÆíÁýÇÏ´Â Áß¿¡ ´Ù¸¥ »ç¿ëÀÚ°¡ ¿øº»À» ¸¶À½´ë·Î ¹Ù²ã ¹ö¸± ¼ö ÀÖ´Ù. ±×·¸´Ù¸é µ¿½Ã¼º ¹®Á¦¿¡ ´ëÇÑ ADO.NETÀÇ ÇØ°áÃ¥Àº ¹«¾ùÀϱî?

¹®Á¦°¡ ÀÖ´Ù¸é ´ç¿¬È÷ ÇØ°áÃ¥µµ ÀÖ¾î¾ß°ÚÁö¸¸ ¾ÈŸ±õ°Ôµµ ÀÌ ¹®Á¦¿¡ ´ëÇؼ­´Â ÇØ°áÃ¥ÀÌ Á¦°øµÇÁö ¾Ê´Â´Ù. ¶óÀ̺귯¸®´Â ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§ ¿¹¿Ü¸¦ ´øÁö´Â °Í ¿Ü¿¡´Â ¾î¶°ÇÑ Á¶Ä¡µµ ÃëÇÏÁö ¾ÊÀ¸¸ç »ç½Ç ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â »ÏÁ·ÇÑ ¹æ¹ýµµ ¾ø´Ù. ¼­¹ö¿¡¼­ ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ¸ð¸£´Âµ¥ ¹«½¼ ÇØ°áÃ¥ÀÌ Àְڴ°¡? ±×·¡¼­ µ¿½Ã¼º ¹®Á¦´Â ÀüÀûÀ¸·Î ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾Ë¾Æ¼­ ÇØ°áÇØ¾ß ÇÑ´Ù. ¿¹¿Ü¸¦ ¹Þ¾Æ ÀÚ½ÅÀÇ °íÀ¯ ³í¸®¿¡ ¸Â°Ô ó¸®ÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. À§ ¹®Á¦ÀÇ °æ¿ì ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÃëÇÒ ¼ö ÀÖ´Â ÇØ°áÃ¥Àº ´ÙÀ½ µÎ °¡Áö Á¤µµ¸¦ »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù.

 

l ¿ì¼±Àº ¿¹¿Ü°¡ ¹ß»ýÇÑ ¹®ÀåÀ» ¹«½ÃÇØ ¹ö¸®´Â °ÍÀÌ´Ù. ¹è¿ëÁØÀÌ ¾ø¾îÁ® ¹ö·È´Ù¸é ÀÌ ·¹Äڵ忡 ´ëÇÑ ¾÷µ¥ÀÌÆ®¸¦ ½ÇÇàÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹æ¹ý´ë·Î¶ó¸é ¸ÕÀú ÆíÁýÇÑ ÂÊÀÇ °ªÀÌ À¯ÁöµÇ¸ç ¹è¿ëÁØÀº ¼­¹ö°¡ ¹Ù²Û °­ÁØ»óÀ¸·Î ³²´Â´Ù.

l ¿¹¿Ü°¡ ¹ß»ýÇÑ ¹®ÀåÀ» °­Á¦·Î ½ÇÇàÇÑ´Ù. ´©±º°¡°¡ ¹è¿ëÁØÀ» °­ÁØ»óÀ¸·Î ¹Ù²Ù¾ú´Ù¸é ´Ù½Ã ¿æ»ç¸¶·Î ¹Ù²Ù¾î ¹ö¸°´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é ¿ø·¡ ·¹Äڵ带 ãÀ» ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÇÊ¿äÇѵ¥ ±âº»Å°¿¡ ŸÀÓ½ºÅÆÇÁ³ª °íÀ¯ÀÇ ID¸¦ ¼û°Ü µÎ¾î¾ß ÇÑ´Ù.

 

ÀÌ ¿Ü¿¡ Á¦ 3 ÀÇ ¹æ¹ýµµ »ý°¢ÇØ º¼ ¼ö ÀÖÁö¸¸ ¾î¶² ¹æ¹ýÀ» ¾²µç µÑ Áß ÇϳªÀÇ ¾÷µ¥ÀÌÆ®°¡ ¼Õ½ÇµÇ´Â °ÍÀº ¾î¿ ¼ö ¾ø´Ù. ÀüÈÄÀÇ °ª Áß ¾î¶² °ÍÀ» ÀÎÁ¤ÇÏ´À³ÄÀÇ Â÷ÀÌ°¡ ÀÖÀ» »ÓÀÌ´Ù. Á¤ ¹®Á¦°¡ µÈ´Ù¸é ¿¹¿Ü 󸮱⿡¼­ ´ëÈ­»óÀÚ¸¦ ¶ç¿ö »ç¿ëÀÚ¿¡°Ô µÑ Áß ¾î¶² °ªÀ» ÃëÇÒ °ÍÀÎÁö¸¦ ¹°¾îº¸´Â ¼ö¹Û¿¡ ¾ø´Ù. ³í¸®ÀûÀ¸·Î ÇØ°áÇÒ ¹æ¹ýÀÌ ¾øÀ¸´Ï »ç¿ëÀÚ¿¡°Ô Ã¥ÀÓÀ» ¶° ³Ñ±â´Â °ÍÀÌ´Ù. ´ÙÇàÈ÷ ¿¹¿Ü·Î Àü´ÞµÇ´Â Àμö¿¡´Â ¿¹¿ÜÀÇ ¿øÀο¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸°¡ Æ÷ÇԵǾî ÀÖ´Ù.

ÀÌ ¹®Á¦´Â ºñ¿¬°áÇüÀÇ ´ÜÁ¡À̶ó±â º¸´Ù´Â »ç¿ë ¿ëµµ°¡ ´Ù¸¥ °ÍÀ¸·Î ÀÌÇØÇØ¾ß ÇÑ´Ù. µ¿½Ã¼º ¹®Á¦¸¦ ¿øõÀûÀ¸·Î ¹æÁöÇÏ·Á¸é ¾î¿ ¼ö ¾øÀÌ ¿¬°áÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¿¬°áÇüÀº ¼öÁ¤ÇÒ ¶§¸¶´Ù ¶ôÀ» °É ¼ö Àֱ⠶§¹®¿¡ µ¿½Ã¼º ¹®Á¦¸¦ ¾î´À Á¤µµ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ´Ü, ¿¬°áÇüµµ ¿ÏÀüÇÑ ÇØ°áÀº ½±Áö ¾Ê´Ù. ±ØµµÀÇ ÀÏ°ü¼ºÀ» È®º¸ÇÏ·Á¸é ¼­¹öÀÇ Àá±Ý ¼öÁØÀ» ³ô¿©¾ß Çϴµ¥ ÀÌ·¸°Ô µÇ¸é ¼º´ÉÀÌ ¶³¾îÁø´Ù.

µ¿½Ã¼º ¹®Á¦¸¦ ¿Ïº®ÇÏ°Ô ÇØ°áÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¼­¹ö¸¦ ²Ç²Ç ¼û°ÜµÎ°í È¥ÀÚ ¾²´Â °Í ¹Û¿¡ ¾ø´Ù. ±×·¯³ª µ¥ÀÌÅͺ£À̽º¶õ ¿øÄ¢ÀûÀ¸·Î °øÀ¯ÇÏ´Â °ÍÀÌ°í °øÀ¯¿¡ ÀÇÇØ °¡Ä¡°¡ ¹ßÈֵǴ °ÍÀ̾ È¥ÀÚ¼­ µ¶Á¡ÇÒ ¹Ù¿¡¾ß ±»ÀÌ µ¢Ä¡ Å« µ¥ÀÌÅͺ£À̽º¸¦ ¾µ ÀÌÀ¯°¡ ¾ø´Ù. µ¿½Ã¼º°ú ÀÏ°ü¼º ÀÌ µÎ °¡Áö´Â Å»ýÀûÀ¸·Î ¹èŸÀû ¼Ó¼ºÀ» °¡Á® ¾ç¸³ÇÒ ¼ö ¾øÀ¸¸ç °í°¡ÀÇ »ó¿ë DBMSµµ Àû´çÈ÷ ±ÕÇüÀ» ¸ÂÃß¾î ŸÇùÇÔÀ¸·Î½á ¹®Á¦¸¦ ÃÖ¼ÒÈ­ÇÒ »ÓÀÌ´Ù.

34-2-2.µ¥ÀÌÅÍ ÁýÇÕ º´ÇÕ

ºñ¿¬°áÇü¿¡¼­´Â µÎ °³ ÀÌ»óÀÇ ´Ù¸¥ »çº»ÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. µÎ ¸íÀÇ »ç¿ëÀÚ°¡ ¼­¹öÀÇ µ¥ÀÌÅ͸¦ °¡Á®°£ ÈÄ °¢ÀÚ ³ª¸§´ë·Î ÆíÁýÇÏ¸é µÎ °³ÀÇ »çº»ÀÌ »ý¼ºµÇ´Âµ¥ ¾çÂÊ¿¡¼­ µ¥ÀÌÅ͸¦ µû·Î ÀúÀåÇÏ¸é ¸ÕÀú ÀúÀåÇÑ ÂÊÀÇ µ¥ÀÌÅÍ°¡ »ç¶óÁö´Â µ¿½Ã¼º ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ÀÌ ¹®Á¦¸¦ ¿Ïº®ÇÏ°Ô ÇØ°áÇÒ ¼ö´Â ¾øÁö¸¸ µÎ »çº»À» Çϳª·Î º´ÇÕÇÑ ÈÄ ÀúÀåÇÏ¸é ¿ÏÈ­ÇÒ ¼ö´ÂÀÖ´Ù.

º´ÇÕ °úÁ¤¿¡¼­ µÑ Áß ¾î´À °ªÀ» äÅÃÇÒ °ÍÀÎÁö ¹Ì¸® ŸÇùÇϰųª Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ÇÑÂÊ¿¡ ¿ì¼±±ÇÀ» ÁÙ ¼ö ÀÖ¾î Àû¾îµµ º´ÇÕÀÌ ¿Ï·áµÈ ÈÄ¿¡´Â ´õ ÀÌ»óÀÇ Ãæµ¹ÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. DataTable°ú DataSet Ŭ·¡½º¿¡ º´ÇÕ ¸Þ¼­µå°¡ Á¦°øµÇ´Âµ¥ DataSetÀÇ ¸Þ¼­µå À§ÁÖ·Î ¾Ë¾Æº¸ÀÚ.

 

public void Merge (DataSet dataSet [,bool preserve,MissingSchemaAction Action])

public void Merge (DataTable table [,bool preserve,MissingSchemaAction Action])

public void Merge (DataRow[] rows [,bool preserve,MissingSchemaAction Action])

 

µ¥ÀÌÅÍ ÁýÇÕ³¢¸® º´ÇÕÇÒ ¼öµµ ÀÖ°í Å×ÀÌÅÍ ÁýÇÕÀÇ Å×À̺í Çϳª¸¦ º´ÇÕÇÒ ¼öµµ ÀÖ´Ù. Å×ÀÌºíº¸´Ù ´õ ÀÛÀº ´ÜÀ§ÀÎ ÇàÀÇ ÁýÇÕÀ» º´ÇÕÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ´ÙÀ½ ¿¹Á¦´Â µ¥ÀÌÅÍ ÁýÇÕ°ú Å×À̺íÀ» º´ÇÕÇÑ´Ù.

 

MergeTest

using System; ~ using System.Windows.Forms;

 

namespace MergeTest {

             public partial class Form1 : Form {

                           private SqlConnection Con;

                           private SqlDataAdapter Adpt;

                           private DataSet DbADOTest;

                           private DataTable tblPeople2;

 

                           public Form1() {

                                        InitializeComponent();

                           }

 

                           private void btnMerge_Click(object sender, EventArgs e) {

                                        Con = new SqlConnection();

                                        Con.ConnectionString = "Server=(local);database=ADOTest;" +

                                                     "Integrated Security=true";

                                        Adpt = new SqlDataAdapter("SELECT * FROM tblPeople", Con);

                                        DbADOTest = new DataSet("ADOTest");

                                        Adpt.Fill(DbADOTest, "tblPeople");

 

                                        tblPeople2 = MakePeopleTable();

                                        DbADOTest.Merge(tblPeople2);

 

                                        dataGridView1.DataSource = DbADOTest.Tables["tblPeople"];

                           }

 

                           private DataTable MakePeopleTable() {

                                        DataTable tblPeople = new DataTable("tblPeople");

 

                                        DataColumn col;

                                        DataRow row;

 

                                        // ¿­ µî·Ï

                                        col = new DataColumn("Name", typeof(String));

                                        col.MaxLength = 10;

                                        col.AllowDBNull = false;

                                        col.Unique = true;

                                        tblPeople.Columns.Add(col);

 

                                        tblPeople.PrimaryKey = new DataColumn[] { col };

 

                                        col = new DataColumn("Age", typeof(Int32));

                                        col.AllowDBNull = false;

                                        tblPeople.Columns.Add(col);

 

                                        col = new DataColumn("Male", typeof(bool));

                                        col.AllowDBNull = false;

                                        tblPeople.Columns.Add(col);

 

                                        // Çà »ðÀÔ

                                        row = tblPeople.NewRow();

                                        row["Name"] = "Á¤¿ì¼º";

                                        row["Age"] = 41;

                                        row["Male"] = true;

                                        tblPeople.Rows.Add(row);

 

                                        row = tblPeople.NewRow();

                                        row["Name"] = "¼ÛÇý±³";

                                        row["Age"] = 33;

                                        row["Male"] = false;

                                        tblPeople.Rows.Add(row);

 

                                        tblPeople.AcceptChanges();

                                        return tblPeople;

                           }

             }

}

 

¾î´ðÅ͸¦ ÅëÇØ SQL ¼­¹ö·ÎºÎÅÍ ÀÐÀº µ¥ÀÌÅÍ¿Í Äڵ忡¼­ Á÷Á¢ »ý¼ºÇÑ µ¥ÀÌÅ͸¦ º´ÇÕÇØ º¸¾Ò´Ù. MakePeopleTable ¸Þ¼­µå´Â ´Ù¸¥ ÇàÀ» Ãß°¡Çϴµ¥ ÀÌ ¸Þ¼­µå°¡ »ý¼ºÇÏ´Â Å×À̺íÀ» ´Ù¸¥ »ç¿ëÀÚ°¡ ÆíÁýÇÑ µ¥ÀÌÅͶó°í °¡Á¤ÇÏÀÚ. Á¤¿ì¼º°ú ¼ÛÇý±³¸¦ Ãß°¡Ç쵂 Á¤¿ì¼ºÀº ³ªÀÌ°¡ ±âÁ¸ µ¥ÀÌÅÍ¿Í ´Ù¸£°í ¼ÛÇý±³´Â »õ·Î Ãß°¡µÇ¾ú´Ù. Merge ¸Þ¼­µå·Î ÀÌ Å×À̺íÀ» µ¥ÀÌÅÍ ÁýÇÕ¿¡ º´ÇÕÇÑ ÈÄ ±×¸®µå·Î Ãâ·ÂÇß´Ù.

¾ÆÁÖ Àß º´ÇյȴÙ. Merge ¸Þ¼­µå´Â ¿øº»°ú »õ Å×À̺íÀÇ Å°¸¦ ºñ±³ÇÏ¿© º´ÇÕÇÑ´Ù. Å°°¡ °°À» °æ¿ì »õ µ¥ÀÌÅÍ·Î µ¤¾î ¾²´Âµ¥ Á¤¿ì¼ºÀº ¿øº»¿¡ 36¼¼¶ó°í µÇ¾î ÀÖÁö¸¸ »õ Å×ÀÌºí¿¡´Â 41¼¼¶ó°í µÇ¾î ÀÖÀ¸¹Ç·Î º´ÇÕ¿¡ ÀÇÇØ 41¼¼·Î ¼öÁ¤µÈ´Ù. ±âº»Å°°¡ ´Ù¸£¸é, Áï ¿øº» Å×ÀÌºí¿¡ ¾ø´Â ÇàÀÌ¸é »õ·Î Ãß°¡µÈ´Ù. ¼ÛÇý±³´Â ¿øº»¿¡ ¾ø¾úÀ¸¹Ç·Î Å×ÀÌºí ³¡¿¡ Ãß°¡µÈ´Ù. ¿øº»¿¡ ÀÖ´ø °í¼Ò¿µ, ±èÅÂÈñ, ¹è¿ëÁØÀº º¯ÇÔ¾øÀÌ À¯ÁöµÈ´Ù.

Merge ¸Þ¼­µåÀÇ µÎ ¹ø° Àμö preserve´Â ¿øº»ÀÇ °ª°ú »õ Å×À̺íÀÇ °ªÀÌ ´Ù¸¦ ¶§ ¿øº»ÀÇ °ªÀ» À¯ÁöÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. »ý·«½Ã µðÆúÆ®ÀÎ false°¡ Àû¿ëµÇ¹Ç·Î º´ÇյǴ Å×À̺íÀÇ »õ °ªÀ¸·Î µ¤¾î ½áÁø´Ù. º´ÇյǴ °ªÀ» ´õ ÃÖ±Ù°ªÀ¸·Î ÀÎÁ¤ÇÏ´Â °ÍÀÌ´Ù. ÀÌ Àμö¸¦ true·Î º¯°æÇÏ¸é ¿øº» Å×ÀÌºí¿¡ ÀÖ´Â Á¤¿ì¼ºÀÇ ¿ø·¡ ³ªÀÌ°¡ À¯ÁöµÇ°í º´ÇյǴ Å×À̺íÀÇ °ªÀÌ ¹«½ÃµÈ´Ù. Merge ¸Þ¼­µå¸¦ ´ÙÀ½°ú °°ÀÌ È£ÃâÇØ º¸ÀÚ.

 

DbADOTest.Merge(tblPeople2, true, MissingSchemaAction.Add);

 

Á¤¿ì¼ºÀÇ ³ªÀÌ°¡ ¿øº»°ªÀÎ 36¼¼¸¦ ±×´ë·Î À¯ÁöÇÑ´Ù. preserve Àμö´Â º´ÇÕÇÏ´Â ÂÊÀÇ °ªÀ» ÃëÇÒ °ÍÀÎÁö º´ÇյǴ ÂÊÀÇ °ªÀ» ÃëÇÒ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÔÀ¸·Î½á Ãæµ¹µÇ´Â °ª Áß Çϳª¸¦ ¼±ÅÃÇÒ ±âȸ¸¦ ºÎ¿©ÇÑ´Ù.

¾Æ¹« Å×ÀÌºí³¢¸® º´ÇÕÀÌ °¡´ÉÇÏÁö´Â ¾ÊÀ¸¸ç ½ºÅ°¸¶°¡ °°°Å³ª ¾Æ´Ï¸é Àû¾îµµ ÀÚµ¿ º¯È¯ÀÌ °¡´ÉÇÒ Á¤µµ·Î À¯»çÇØ¾ß ÇÑ´Ù. À§ ¿¹Á¦¿Í °°ÀÌ µÎ Å×À̺íÀÇ ½ºÅ°¸¶°¡ ¿ÏÀüÈ÷ °°À¸¸é ÀÌ»ó ¾øÀÌ Àß º´ÇÕµÇÁö¸¸ ¿­ÀÇ Å¸ÀÔÀÌ ´Ù¸£¸é º´ÇÕµÇÁö ¾Ê´Â´Ù. »õ Å×À̺íÀÇ Age Çʵ带 ¹®ÀÚ¿­ ŸÀÔÀ¸·Î ¹Ù²Û ÈÄ ½ÇÇàÇÏ¸é ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ¹®ÀÚ¿­°ú Á¤¼ö´Â ȣȯµÇÁö ¾ÊÀ¸¹Ç·Î º´ÇյǴ ÂÊÀÇ ¹®ÀÚ¿­À» Á¤¼ö·Î ¹Ù²ã ³ÖÀ» ¼ö ¾ø´Ù.

Åë»ó °°Àº µ¥ÀÌÅÍ ¼Ò½º¿¡¼­ ÀÐÀº ´Ù¸¥ »çº»ÀÎ °æ¿ì°¡ °¡Àå ¸¹Àºµ¥ ÀÌ·± °æ¿ì´Â ½ºÅ°¸¶°¡ ¿ÏÀüÈ÷ ÀÏÄ¡ÇϹǷΠº´ÇÕ¿¡ ¹®Á¦°¡ ¾ø´Ù. ´ÙÇàÈ÷ ¾à°£ÀÇ À¯¿¬¼ºÀÌ À־ »õ Å×ÀÌºí¿¡ ¿øº»¿¡ ¾ø´Â ¿­ÀÌ Ãß°¡µÇ¾î ÀÖÀ» °æ¿ì¿¡µµ ¾î´À Á¤µµ º´ÇÕÀº °¡´ÉÇÏ´Ù. Merge ¸Þ¼­µåÀÇ ¼¼ ¹ø° Àμö´Â ½ºÅ°¸¶°¡ ´Ù¸¦ °æ¿ì ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.

 

°ª

¼³¸í

Add

»õ Å×À̺íÀÇ ½ºÅ°¸¶ Á¤º¸¸¦ Ãß°¡ÇÑ´Ù. ÀÌ °ªÀÌ µðÆúÆ®ÀÌ´Ù.

AddWithKey

»õ Å×À̺íÀÇ ½ºÅ°¸¶¿Í ±âº» Å° Á¤º¸¸¦ Ãß°¡ÇÑ´Ù.

Error

¿¹¿Ü¸¦ ¹ß»ý½ÃŲ´Ù.

Ignore

»õ ½ºÅ°¸¶ Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.

 

»õ ¿­À» ¿øº»¿¡ Ãß°¡ÇÒ ¼öµµ ÀÖ°í ¹«½ÃÇÒ ¼öµµ ÀÖ´Ù. ½ºÅ°¸¶°¡ ´Þ¶ó¼­´Â ¾ÈµÈ´Ù¸é ¾Æ¿¹ ¿¹¿Ü¸¦ ÀÏÀ¸Å°µµ·Ï ÇÏ¿© º´ÇÕÀ» °ÅºÎÇÒ ¼öµµ ÀÖ´Ù. MakePeopleTable ¸Þ¼­µå¸¦ ¼öÁ¤ÇÏ¿© Á¦ÀÏ µÚ¿¡ ÀüÈ­¹øÈ£ Ä÷³À» Ãß°¡ÇØ º¸ÀÚ.

 

private DataTable MakePeopleTable() {

         ....

       col = new DataColumn("Tel", typeof(string));

       col.AllowDBNull = true;

       tblPeople.Columns.Add(col);

 

         // Çà »ðÀÔ

         row = tblPeople.NewRow();

         row["Name"] = "Á¤¿ì¼º";

         row["Age"] = 41;

         row["Male"] = true;

       row["tel"] = "111-2222";

         tblPeople.Rows.Add(row);

 

         row = tblPeople.NewRow();

         row["Name"] = "¼ÛÇý±³";

         row["Age"] = 33;

         row["Male"] = false;

       row["tel"] = "333-4444";

         tblPeople.Rows.Add(row);

 

         tblPeople.AcceptChanges();

         return tblPeople;

}

 

¿¹Á¦ DB¿¡´Â ÀüÈ­¹øÈ£°¡ ¾ø¾î µÎ Å×À̺íÀÇ ½ºÅ°¸¶°¡ ´Þ¶óÁ³´Ù. Merge ¸Þ¼­µå È£Ãâ¹®Àº ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.

 

DbADOTest.Merge(tblPeople2, false, MissingSchemaAction.Add);

 

preserve´Â false·Î ¹Ù²Ù¾ú°í ½ºÅ°¸¶ ¿É¼ÇÀº Add·Î ÁöÁ¤Çß´Ù. »õ Å×À̺íÀÇ Ãß°¡¿­ÀÌ ¿øº» Å×ÀÌºí¿¡ Ãß°¡µÇ¸ç º´ÇÕµÈ ·¹ÄÚµå´Â ÀÌ ¿­ÀÇ Á¤º¸¸¦ °¡Áø´Ù.

Merge ¸Þ¼­µå´Â º´ÇÕÇÒ ¶§ Á¦¾à Á¶°ÇÀ» Á¡°ËÇÏÁö ¾ÊÁö¸¸ º´ÇÕÀÌ ¿Ï·áµÈ ÈÄ Á¦¾à Á¶°ÇÀ» ÀÏ°ý Á¡°ËÇÑ´Ù. ±×·¡¼­ ¿øº» Å×À̺íÀÇ ±âÁ¸ Ç൵ Ãß°¡µÈ ¿­ÀÇ Á¦¾à Á¶°ÇÀ» À§¹ÝÇؼ­´Â ¾ÈµÈ´Ù. »õ·Î Ãß°¡µÈ Tel ÇʵåÀÇ AllowDBNull ÇÁ·ÎÆÛƼ°¡ true·Î ÁöÁ¤µÇ¾î ÀÖ¾î NULL°ªÀ» Çã¿ëÇϴµ¥ ÀÌ °ªÀ» false·Î ¹Ù²Ù¸é ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ¿øº» Å×À̺íÀÇ ±âÁ¸ ·¹ÄÚµå´Â ÀüÈ­¹øÈ£ Á¤º¸°¡ ¾ø±â ¶§¹®ÀÌ´Ù. Merge ¸Þ¼­µå È£ÃâÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇØ º¸ÀÚ.

 

DbADOTest.Merge(tblPeople2, false, MissingSchemaAction.Ignore);

 

º´ÇÕÀº µÇÁö¸¸ »õ·Î Ãß°¡µÈ ¿­ÀÌ ¹«½ÃµÇ°í ³ªÅ¸³ªÁö ¾Ê´Â´Ù. Error·Î ¹Ù²Ù¸é ¾Æ¿¹ ¿¹¿Ü ó¸®µÇ¾î º´ÇÕÀÌ °ÅºÎµÈ´Ù. ÀÌ °æ¿ì´Â ½ºÅ°¸¶°¡ ¹Ýµå½Ã ÀÏÄ¡ÇÏ´Â Å×ÀÌºí³¢¸®¸¸ º´ÇÕÇÒ ¼ö ÀÖÀ¸¸ç Á¦ÀÏ ÀÌ»óÀûÀÌ°í ÀϹÝÀûÀÌ´Ù. ¾Ö¸ÅÇÏ°Ô º´ÇÕÇÏ´À´Ï ¾Æ¿¹ ¿¡·¯·Î ó¸®ÇØ ¹ö¸®´Â °ÍÀÌ ´õ ³´´Ù.

Merge ¸Þ¼­µå¸¦ ½Ç¹«¿¡ »ç¿ëÇÏ·Á¸é À̺¸´Ù ´õ º¹ÀâÇÑ »óȲÀ» °í·ÁÇØ¾ß ÇÑ´Ù. ¿­ÀÇ ¸ñ·ÏÀº °°Áö¸¸ ÀϺΠ¿­ÀÇ Å¸ÀÔÀÌ ¾à°£ ´Ù¸¥ °æ¿ìµµ ÀÖ°í ±âº»Å°°¡ ´Ù¸£°Ô ¼³Á¤µÈ °æ¿ìµµ ÀÖ´Ù. ÀÌ·± ¹®Á¦°¡ ¹ß»ýÇÏ¸é ¿¹¿Üµµ ¹ß»ýÇÏ°í MergeFailed À̺¥Æ®µµ ¹ß»ýÇϴµ¥ Äڵ忡¼­ ¿¹¿Ü »óȲÀ» ÀûÀýÇÏ°Ô Á¶Á¤ÇØ¾ß ÇÑ´Ù.

¶Ç ÆíÁýÁßÀÎ Å×ÀÌºí³¢¸® º´Çսà °¢ ¿­ÀÇ ¹öÀü °ü¸® ±ÔÄ¢°ú Çà »óÅÂÀÇ º¯È­µµ º¹ÀâÇÏ´Ù. preserve°¡ trueÀÌ¸é ¿øº»°ªÀ» µ¤¾î¾²Áö ¾Ê´Â´Ù°í Çߴµ¥ ³»ºÎ ±ÔÄ¢Àº À̺¸´Ù ´õ º¹ÀâÇÏ´Ù. ¿øº»ÀÇ Current ¹öÀüÀº ±×´ë·Î À¯ÁöµÇÁö¸¸ Original ¹öÀüÀÇ °ªÀº ¿©ÀüÈ÷ º¯°æµÇ¸ç ÇàÀÇ RowState´Â Modified·Î ¹Ù²ï´Ù.

ÇàÀÇ »óÅ¿¡ µû¶ó ¾î¶² ¹öÀüÀÌ ¾îµð·Î ´ëÀԵȴٴ »ó¼¼ÇÑ ±ÔÄ¢ÀÌ MSDN¿¡ Àß ¼³¸íµÇ¾î ÀÖÁö¸¸ ÀÌ ±ÔÄ¢À» ¼÷ÁöÇÏ¿© ¹Ì¸® °á°ú¸¦ ¿¹ÃøÇÏ´Â °ÍÀº ¾î·Æ´Ù. ÀÌ·± º¹ÀâÇÑ ±ÔÄ¢Àº ¾Ö½á ¿Ü¿ï·Á°í ÇÏ´Â °Íº¸´Ù ½Ç¹« »óȲ¿¡¼­ ÀÏ´Ü º´ÇÕÇØ º¸°í ¿øÇÏ´Â °á°ú°¡ ¸Â´ÂÁö È®ÀÎÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. º´ÇÕ ±ÔÄ¢ÀÌ ¾Æ¹«¸® º¹ÀâÇÏ´õ¶óµµ »ó½ÄÀ» ¹þ¾î³ªÁö ¾Ê´Â ¼öÁØÀ̹ǷΠ±â´ëÇÑ ´ë·Î µ¿ÀÛÇÒ È®·üÀÌ ³ô´Ù.

34-2-3.À¯È¿¼º Á¡°Ë

À¯È¿¼º Á¡°ËÀ̶õ »õ·Î ÀÔ·ÂµÈ °ªÀÌ °ú¿¬ Á¦´ë·Î µÈ °ªÀÎÁö °Ë»çÇÔÀ¸·Î½á µ¥ÀÌÅÍÀÇ ¿ÏÀü¼ºÀ» ³ôÀÌ´Â ±â¼úÀÌ´Ù. ¹é¿£µåÀÇ ¼­¹öµµ Á¦¾àÀ̳ª Æ®¸®°Å µî ¹«°á¼ºÀ» À¯ÁöÇϱâ À§ÇÑ ¿©·¯ °¡Áö ÀåÄ¡¸¦ Á¦°øÇÑ´Ù. ±×·¯³ª ¼­¹öÀÇ ÀåÄ¡´Â ´ÙºÐÈ÷ Çü½ÄÀûÀ̾ Áߺ¹ ¿©ºÎ³ª °ªÀÇ ¹üÀ§ µîÀ» ±â°èÀûÀ¸·Î Á¡°ËÇÒ ¼ö´Â ÀÖÁö¸¸ ÀÀ¿ë ÇÁ·Î±×·¥ °íÀ¯ÀÇ À¯È¿¼º±îÁö °Ë»çÇÏÁö´Â ¸øÇÑ´Ù. ¿¹¸¦ µé¾î °³¼ö³ª Á¡¼ö°¡ Çã°¡µÈ ¹üÀ§ÀÇ °ªÀÎÁö ÆľÇÇÒ ¼ö ÀÖÁö¸¸ Áֹεî·Ï¹øÈ£³ª »óÇ° Äڵ尡 Á¦´ë·Î µÈ °ÍÀÎÁö±îÁö´Â Á¡°ËÇÒ ¼ö ¾ø´Ù.

¼­¹ö°¡ Áö¿øÇÏÁö ¸øÇÏ´Â À¯È¿¼º Á¡°ËÀº Ŭ¶óÀ̾ðÆ®°¡ Á÷Á¢ ÇØ¾ß ÇÑ´Ù. ¼­¹ö¿¡°Ô ¸ðµç °ÍÀ» ¶°³Ñ±âÁö ¾ÊÀ½À¸·Î½á ¼­¹öÀÇ ºÎ´ãÀ» ´ú¾îÁÙ ¼ö ÀÖ°í À߸øµÈ µ¥ÀÌÅÍ´Â ¾Æ¿¹ ¼­¹ö·Î Àü¼ÛÇÏÁö ¾ÊÀ¸¹Ç·Î½á ³×Æ®¿÷ Æ®·¡ÇÈÀ» ÁÙ¿© Àü¹ÝÀûÀÎ ¼º´É Çâ»ó¿¡ µµ¿òÀÌ µÈ´Ù. À¯È¿¼º Á¡°ËÀº ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®°¡ ÇùÁ¶ÀûÀ¸·Î ³ª´©¾î ÇÏ´Â °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. Å×À̺íÀÇ µ¥ÀÌÅÍ°¡ ÆíÁýµÉ ¶§¸¶´Ù ´ÙÀ½ 4°³ÀÇ À̺¥Æ®°¡ ¹ß»ýÇϴµ¥ ÀÌ À̺¥Æ®¿¡¼­ ÀÔ·ÂµÈ °ªÀ» Á¡°ËÇÑ´Ù.

 

l ColumnChanging, ColumnChanged : Ä÷³ÀÇ °ªÀÌ ÆíÁýµÉ ¶§¸¶´Ù ¹ß»ýÇÑ´Ù. ing À̺¥Æ®´Â ÆíÁýÁß¿¡ ¹ß»ýÇϸç ed À̺¥Æ®´Â ÆíÁýÀÌ ¿Ï·áµÈ ÈÄ¿¡ ¹ß»ýÇÑ´Ù. À¯È¿¼º Á¡°ËÀº °ªÀÌ È®Á¤µÇ±â Àü¿¡ ÇØ¾ß ÇϹǷΠÁÖ·Î ing À̺¥Æ®¿¡¼­ ó¸®ÇÑ´Ù.

l RowChanging, RowChanged : ÇàÀÌ ÆíÁýµÉ ¶§¸¶´Ù ¹ß»ýÇÑ´Ù. ·¹ÄÚµåÀÇ Ä÷³ Áß Çϳª°¡ ÆíÁýµÉ ¶§¸¶´Ù ¹ß»ýÇÏÁö¸¸ ¾î¶² ¿­ÀÌ ÆíÁýµÇ°í ÀÖ´Ù´Â Á¤º¸´Â Àü´ÞµÇÁö ¾Ê´Â´Ù. ÆíÁýÁß¿¡ ¹ß»ýÇÏ´Â ing ¸Þ½ÃÁö¿Í ÆíÁý ¿Ï·á ÈÄ¿¡ ¹ß»ýÇÏ´Â ed ¸Þ½ÃÁö°¡ ÀÖ´Ù.

 

¿­ÀÇ °ªÀÌ ¹Ù²ð ¶§¸¶´Ù À¯È¿¼ºÀ» Á¡°ËÇÏ·Á¸é ColumnChanging À̺¥Æ®°¡ ÀûÇÕÇϸç ÇàÀÇ ¸ðµç ¿­ÀÌ ´Ù ÆíÁýµÈ ÈÄ¿¡ ÇѲ¨¹ø¿¡ À¯È¿¼ºÀ» Á¡°ËÇѴٰųª ´Ù¸¥ ¿­°úÀÇ °ü°è±îÁö °í·ÁÇØ¾ß ÇÏ´Â °æ¿ì´Â RowChanging À̺¥Æ®°¡ ÀûÇÕÇÏ´Ù. ed À̺¥Æ®´Â ÆíÁýµÈ ÈÄÀÇ ÈÄ¼Ó Á¶Ä¡°¡ ÇÊ¿äÇÒ ¶§ ó¸®Çϴµ¥ »ç½Ç»ó º°·Î ¾µ ÀÏÀÌ ¾ø´Ù. ÀÌ¿Ü¿¡ ÇàÀ» »èÁ¦ÇÒ ¶§ ¹ß»ýÇÏ´Â RowDeleting, RowDeleted À̺¥Æ®µµ ÀÖ´Ù.

 

Validation

using System; ~ using System.Windows.Forms;

using System.Data.SqlClient;

 

namespace Validation {

             public partial class Form1 : Form {

                           private SqlConnection Con;

                           private SqlDataAdapter Adpt;

                           DataTable tblPeople;

 

                           public Form1() {

                                        InitializeComponent();

                           }

 

                           private void Form1_Load(object sender, EventArgs e) {

                                        Con = new SqlConnection();

                                        Con.ConnectionString = "Server=(local);database=ADOTest;" +

                                                     "Integrated Security=true";

                                        Adpt = new SqlDataAdapter("SELECT * FROM tblPeople", Con);

                                        tblPeople = new DataTable("tblPeople");

                                        tblPeople.ColumnChanging +=

                                                     new DataColumnChangeEventHandler(tblPeople_ColumnChanging);

                                        tblPeople.RowChanging +=

                                                     new DataRowChangeEventHandler(tblPeople_RowChanging);

 

                                        Adpt.Fill(tblPeople);

                                        dataGridView1.DataSource = tblPeople;

                           }

 

                           void tblPeople_ColumnChanging(object sender, DataColumnChangeEventArgs e) {

                                        if (e.Column.ColumnName == "Age") {

                                                     if ((int)e.ProposedValue < 0 || (int)e.ProposedValue > 100) {

                                                                   e.Row.SetColumnError("Age", "³ªÀÌ´Â 0 ~ 100 »çÀÌ¿©¾ß ÇÕ´Ï´Ù.");

                                                     } else {

                                                                   e.Row.SetColumnError("Age", "");

                                                     }

                                        }

                           }

 

                           void tblPeople_RowChanging(object sender, DataRowChangeEventArgs e) {

                                        if ((bool)e.Row["Male"] == false) {

                                                     if ((int)e.Row["Age"] > 40) {

                                                                   e.Row.SetColumnError("Age", "¿©¼ºÀÇ ³ªÀÌ´Â 40¼¼ ÀÌÇÏ¿©¾ß ÇÕ´Ï´Ù.");

                                                     } else {

                                                                   e.Row.SetColumnError("Age", "");

                                                     }

                                        }

                           }

             }

}

 

Form1_Load À̺¥Æ®¿¡¼­ tblPeople Å×À̺íÀ» ÀÐ¾î ±×¸®µå·Î Ãâ·ÂÇß´Ù. ±×¸®°í µÎ °³ÀÇ ing À̺¥Æ®¿¡ ´ëÇÑ Çڵ鷯¸¦ µî·ÏÇÏ¿´´Ù. À̺¥Æ®¸¦ ó¸®ÇÏÁö ¾Ê°Å³ª Çڵ鷯¿¡¼­ º°´Ù¸¥ Á¶Ä¡¸¦ ÃëÇÏÁö ¾ÊÀ¸¸é »ç¿ëÀÚ°¡ ¾î¶² °ªÀ» ÀÔ·ÂÇϵçÁö ¸¸»ç OKÀ̹ǷΠÀ߸øµÈ °ªÀÌ ÀÔ·ÂµÉ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ³ªÀÌ¿¡ -10À» ÀÔ·ÂÇϰųª 200°°Àº Å͹«´Ï¾ø´Â °ªÀ» ÀÔ·ÂÇÏ´Â °Íµµ °¡´ÉÇØ ÀÌ´ë·Î µÎ¸é µ¥ÀÌÅÍ°¡ ¾û¸ÁÀÌ µÉ ¼öµµ ÀÖ´Ù.

À߸øµÈ µ¥ÀÌÅͳª ³í¸®ÀûÀ¸·Î ÀÇ¹Ì ¾ø´Â °ªÀ» ¹æÁöÇÏ·Á¸é À̺¥Æ® Çڵ鷯¿¡¼­ ÀԷ°ªÀ» °¨½ÃÇØ¾ß ÇÑ´Ù. ´ÜÀÏ ¿­ÀÇ °ªÀ» °¨½ÃÇϱâ À§Çؼ­´Â ColumnChanging À̺¥Æ®°¡ ÀûÇÕÇÏ´Ù. DataColumnChangeEventArgs Àμö°¡ Àü´ÞµÇ´Âµ¥ ÀÌ °´Ã¼ÀÇ ´ÙÀ½ ÇÁ·ÎÆÛƼ¸¦ ÅëÇØ ¾î¶² ·¹ÄÚµåÀÇ ¾î¶² ¿­¿¡ ¹«½¼ °ªÀÌ ´ëÀԵǾú´ÂÁö ¾Ë ¼ö ÀÖ´Ù.

 

ÇÁ·ÎÆÛƼ

ŸÀÔ

¼³¸í

Row

DataRow ¨Þ

¿­ÀÌ ÀÖ´Â Çà °´Ã¼

Column

DataColumn ¨Þ

ÆíÁýµÇ´Â ¿­

ProposedValue

object

Á¦¾ÈµÈ °ª. Áï ¿­¿¡ ´ëÀÔµÈ °ªÀÌ´Ù.

 

Çڵ鷯´Â ÀÌ Á¤º¸¸¦ º¸°í Á¦¾ÈµÈ °ª, Áï »ç¿ëÀÚ°¡ ÀÔ·ÂÇÏ°íÀÚ ÇÏ´Â °ªÀ» ¹Þ¾ÆµéÀ̰ųª ¾Æ´Ï¸é ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ¿© À߸øµÈ °ªÀÓÀ» ¾Ë¸°´Ù. ¿¡·¯¸¦ Ãâ·ÂÇÒ ¶§ ¸Þ½ÃÁö ¹Ú½º¸¦ ¿­ ¼ö ÀÖÁö¸¸ »ç¼ÒÇÑ ½Ç¼ö¿¡ ´ëÇØ ´ëÈ­»óÀÚ°¡ ºÒ¾¦ ºÒ¾¦ ¿­¸®´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¹Ç·Î SetColumnError ¸Þ¼­µå·Î ¿¡·¯°¡ ÀÖÀ½À» Ç¥½Ã¸¸ ÇØ µÎ´Â °ÍÀÌ ÁÁ´Ù.

ÇàÀÌ º¯°æµÉ ¶§ÀÎ RowChanging À̺¥Æ®¿¡¼­´Â Çà Àüü¿¡ ´ëÇÑ À¯È¿¼º Á¡°Ë Äڵ带 ÀÛ¼ºÇÑ´Ù. ´ÜÀÏ°ªÀ» Á¡°ËÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¿­°£ÀÇ °ü°è¸¦ Á¡°ËÇÒ ¶§ ÀûÇÕÇÏ´Ù. Å×½ºÆ®¸¦ À§ÇØ ¿©ÀÚ °í°´Àº 40¼¼¸¦ ³Ñ¾î¼­´Â ¾ÈµÈ´Ù´Â Á¶°ÇÀ» ¼³Á¤ÇØ º¸ÀÚ. ÀÌ Á¶°ÇÀ» Á¡°ËÇÏ·Á¸é ¼ºº°°ú ³ªÀ̸¦ µ¿½Ã¿¡ ÂüÁ¶ÇØ¾ß ÇϹǷΠ¿­ÀÌ ¹Ù²ð ¶§ Á¡°ËÇÏ´Â °ÍÀº ºÎÀû´çÇϸç Çà Àüü¸¦ Á¡°ËÇØ¾ß ÇÑ´Ù. RowChanging À̺¥Æ®ÀÇ Àμö·Î´Â ´ÙÀ½ µÎ °¡Áö°¡ Àü´ÞµÈ´Ù.

 

ÇÁ·ÎÆÛƼ

ŸÀÔ

¼³¸í

Row

DataRow ¨Þ

º¯°æµÇ°í ÀÖ´Â Çà

Action

DataRowAction ¨Þ

¾î¶² ÆíÁý ÀÛ¾÷ÀÌ ¼öÇàµÇ°í ÀÖ´ÂÁö¸¦ ¾Ë¸°´Ù. Add, Change, Delete µîÀÇ ¿­°Å°ª Áß ÇϳªÀÌ´Ù.

 

ÆíÁýµÇ°í ÀÖ´Â Çà¿¡ ´ëÇÑ ÂüÁ¶¸¸ Àý´ÞµÉ »Ó ¿­¿¡ ´ëÇÑ ÂüÁ¶´Â Àü´ÞµÇÁö ¾ÊÀ¸¹Ç·Î Çà ÀüüÀÇ ¸ðµç °ªÀ» Á¡°ËÇØ ºÁ¾ß ÇÑ´Ù. RowÀÇ Age¿Í Male Çʵ带 ÀÐ¾î ¿©ÀÚÀÌ°í ³ªÀÌ°¡ 40ÀÌ»óÀÌ¸é ³ªÀÌ¿­¿¡ ¿¡·¯ Ç¥½Ã¸¦ Çß´Ù. ½ÇÇàÇØ º¸¸é Á¶°Ç¿¡ ¸ÂÁö ¾Ê´Â ·¹Äڵ忡 »¡°£»ö ´À³¦Ç¥°¡ ³ªÅ¸³­´Ù.

¹®Á¦°¡ ÀÖ´Â ¿­¿¡ ¿¡·¯ ¸Þ½ÃÁö¸¦ µî·ÏÇØ ³õÀ» ¼ö Àִµ¥ ÀÌ ¸Þ½ÃÁö´Â Â÷ÈÄ GetColumnsInError ¸Þ¼­µå·Î Á¶»çÇÑ´Ù. ¿¡·¯ ¹ß»ý½Ã¸¶´Ù ¸Å¹ø ±ÍÂú°Ô ÇÏÁö ¸»°í »óŶõ µî¿¡ °ø¼ÕÇÏ°Ô ½Ç¼ö¸¦ ÁöÀûÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿øÇÑ´Ù¸é ¿¡·¯ ¸Þ½ÃÁö¸¦ µî·ÏÇÏ´Â ´ë½Å Áï½Ã ¸Þ½ÃÁö ¹Ú½º·Î ¿À·ù¸¦ ¾Ë¸®°í ¾Æ¿¹ ÀÔ·ÂÀ» °ÅºÎÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. ´Ü, ÀÌ·¸°Ô Çϸé ÀÔ·ÂÁß¿¡ ¸Þ½ÃÁö ¹Ú½º°¡ ¿­·Á ºÒÆíÇØÁú ¼öµµ ÀÖÀ¸¹Ç·Î ¾ÆÁÖ Ä¡¸íÀûÀÎ °ª¿¡ ´ëÇؼ­¸¸ ¸Þ½ÃÁö ¹Ú½º¸¦ ¿­¾î¾ß ÇÑ´Ù.

 

void tblPeople_ColumnChanging(object sender, DataColumnChangeEventArgs e) {

         if (e.Column.ColumnName == "Age") {

                      if ((int)e.ProposedValue < 0 || (int)e.ProposedValue > 100) {

                                   MessageBox.Show("³ªÀÌ´Â 0 ~ 100 »çÀÌ¿©¾ß ÇÕ´Ï´Ù.");

                                   e.ProposedValue = e.Row["Age", DataRowVersion.Original];

                      }

         }

}

 

¿­¿¡ ´ëÀ﵃ °ªÀÎ ProposedValue¸¦ ¿ø·¡°ªÀ¸·Î ¹Ù²ã ¹ö¸®¸é ÀÔ·ÂÀÌ °ÅºÎµÈ´Ù. ÀÌ Ã³¸®´Â ¿­ÀÌ º¯°æµÉ ¶§¸¸ ÇÒ ¼ö ÀÖÀ¸¸ç ÇàÀÌ º¯°æµÉ ¶§´Â ÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÇàÀÌ ¹Ù²ð ¶§´Â ÆíÁýµÇ´Â ¿­¿¡ ´ëÇÑ Á¤º¸°¡ Àü´ÞµÇÁö ¾Ê¾Æ ³ªÀÌ°¡ ÆíÁýµÇ¾î Á¶°ÇÀÌ À§¹ÝµÈ °ÍÀÎÁö ¼ºº°ÀÌ ¹Ù²î¾î Á¶°ÇÀÌ À§¹ÝµÈ °ÍÀÎÁö ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÀÌ Ã³¸®¸¦ Á¤ ÇÏ°í ½Í´Ù¸é °ü·ÃµÈ ¿­ º¯°æ À̺¥Æ®¿¡¼­ ÀÏÀÏÀÌ Ã³¸®ÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. Age º¯°æ½Ã ¿©¼ºÀº 40¼¼ ¹Ì¸¸ÀÎÁö º¸°í ¼ºº° º¯°æ½Ã ¿©¼ºÀÎ °æ¿ì¸¸ ³ªÀ̸¦ Á¡°ËÇÏ¸é µÈ´Ù.

¾ÈÀüÇÑ µ¥ÀÌÅÍ °ü¸®¸¦ À§ÇØ À¯È¿¼º Á¡°ËÀº ²À ÇÊ¿äÇÏ´Ù. ƯÈ÷ »ç¿ëÀڷκÎÅÍ °ªÀ» ÀԷ¹ÞÀ» ¶§´Â ¹«½¼ ÁþÀ» ÇÒ Áö ¿¹ÃøÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚ´Â ¼­ºñ½º ´ë»óÀÌÁö¸¸ µµ¹«Áö ½Å·ÚÇÒ ¼ö ¾ø´Â Á¸ÀçÀÌ´Ù. µ¥ÀÌÅÍ°¡ ÀÔ·ÂµÉ ¶§¸¶´Ù ¸Å¹ø À¯È¿¼º Á¡°ËÀ» ÇÏ¸é ºÒ°¡ÇÇÇÏ°Ô ¼º´ÉÀÇ ÀúÇÏ°¡ ÀÖÀ» ¼ö¹Û¿¡ ¾ø´Ù. Äڵ忡¼­ °ªÀ» ¼öÁ¤ÇѴٰųª ½Å·ÚÇÒ ¼ö ÀÖ´Â °ªÀ̶ó´Â °ÍÀÌ È®½ÇÇÏ´Ù¸é DataRowÀÇ BeginEdit¸¦ È£ÃâÇÏ¿© À¯È¿¼º Á¡°ËÀ» Àá½Ã Áß´ÜÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇϸé EndEdit³ª CancelEdit¸¦ È£ÃâÇÒ ¶§±îÁö À¯È¿¼º Á¡°Ë À̺¥Æ®°¡ ÁßÁöµÈ´Ù.

34-2-4.¹ÙÀεù

¹ÙÀεù(Binding)À̶õ µ¥ÀÌÅÍ ¼Ò½º¸¦ ÆûÀÇ ÄÁÆ®·Ñ°ú ¿¬°áÇÏ¿© Æû¿¡ DBÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ´Â ±â¹ýÀÌ´Ù. Áö±Ý±îÁö Å×À̺íÀ» DataGridView ÄÁÆ®·Ñ¿¡ ¹ÙÀεùÇÏ¿© ³»¿ëÀ» È®ÀÎÇÏ°í ÆíÁýµµ ÇØ º¸¾Ò´Âµ¥ ±×¸®µå´Â Å×À̺í Àüü ³»¿ëÀ» Åë°·Î º¸¿©ÁÖ°í ÆíÁý ±â´Éµµ ¸·°­Çؼ­ »ç¿ëÇϱ⠱²ÀåÈ÷ Æí¸®ÇÏ´Ù. ±×¸®µå»Ó¸¸ ¾Æ´Ï¶ó »ç¿ëÀÚ¿¡°Ô Á¤º¸¸¦ º¸¿©ÁÖ°í ÀԷ¹޴ ´ëºÎºÐÀÇ ÄÁÆ®·ÑÀ» DB¿Í ¹ÙÀεùÇÒ ¼ö ÀÖ´Ù.

¹ÙÀεùÀº DBÀÇ ³»¿ëÀ» Àоî ÄÁÆ®·Ñ¿¡ Ãâ·ÂÇÏ°í ¶Ç ÆíÁýµÈ °ªÀ» DB·Î ´Ù½Ã Àü¼ÛÇÏ´Â º¹ÀâÇÑ µ¿ÀÛÀÌÁö¸¸ °´Ã¼ÁöÇâÀÇ ÇýÅÃÀ¸·Î ÀÎÇØ ¸î °¡Áö ÇÁ·ÎÆÛƼ¸¸ Á¶Á¤ÇÏ¸é ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ °ü¿©Çϴ Ŭ·¡½º°¡ ¿ö³« ¸¹°í ÇÁ·ÎÆÛƼ³¢¸® º¹ÀâÇÏ°Ô ¾ôÇô ÀÖ¾î ±¸Á¶¸¦ ÇÑ´«¿¡ ÆľÇÇϱâ´Â ³­ÇØÇÏ´Ù. ´ÙÀ½ÀåºÎÅÍ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¸é ¹ÙÀεùÀº ÀÚµ¿À¸·Î ±¸¼ºµÇ¹Ç·Î ³Ê¹« »ó¼¼ÇÏ°Ô ¾Ë·Á°í ÇÒ ÇÊ¿ä´Â ¾ø°í ´ëÃæÀÇ µ¿ÀÛ ¹æ½Ä¸¸ ±¸°æÇØ º¸ÀÚ.

´ÙÀ½ ¿¹Á¦´Â SQL ¼­¹öÀÇ tblPeopleÀ» ÀоîµéÀδÙ. Áö±Ý±îÁö ¹è¿î¹Ù´ë·Î ¿¬°á °´Ã¼¸¦ »ý¼ºÇÏ°í ¿¬°á ¹®ÀÚ¿­À» ´ëÀÔÇÑ ÈÄ ¾î´ðÅÍ·Î tblPeopleÀÇ ¸ðµç ·¹Äڵ带 Àоî DbADOTest µ¥ÀÌÅÍ ÁýÇÕÀÇ tblPeople Å×ÀÌºí¿¡ ä¿ü´Ù.

 

BindingTest

using System; ~ using System.Windows.Forms;

using System.Data.SqlClient;

 

namespace BindingTest {

             public partial class Form1 : Form {

                           private SqlConnection Con;

                           private SqlDataAdapter Adpt;

                           private DataSet DbADOTest;

                          

                           public Form1() {

                                        InitializeComponent();

                           }

 

                           private void Form1_Load(object sender, EventArgs e) {

                                        Con = new SqlConnection();

                                        Con.ConnectionString = "Server=(local);database=ADOTest;" +

                                                     "Integrated Security=true";

                                        Adpt = new SqlDataAdapter("SELECT * FROM tblPeople", Con);

                                        DbADOTest = new DataSet("ADOTest");

                                        Adpt.Fill(DbADOTest, "tblPeople");

                           }

             }

}

 

¼­¹ö¿Í ¿¬°áÇÏ°í Å×À̺íÀ» Á¦´ë·Î Àб⵵ ÇßÁö¸¸ ÀÌ´ë·Î ½ÇÇàÇϸé Æû¿¡ ¾Æ¹«°Íµµ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. µ¥ÀÌÅÍ´Â °¡Áö°í ÀÖÁö¸¸ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÙ ÄÁÆ®·Ñµµ ¾ø°í µ¥ÀÌÅ͸¦ Àоî Ãâ·ÂÇÏ´Â Äڵ嵵 ¾ø±â ¶§¹®ÀÌ´Ù. Æû¿¡ ÅؽºÆ® ¹Ú½º¸¦ Çϳª ¹èÄ¡ÇÏ°í ´ÙÀ½ ÄÚµå·Î ù ¹ø° ·¹ÄÚµåÀÇ Name Çʵ带 Ãâ·ÂÇØ º¸ÀÚ.

 

textBox1.Text = (string)DbADOTest.Tables["tblPeople"].Rows[0]["Name"];

 

½ÇÇàÇϸé ÅؽºÆ® ¹Ú½º¿¡ "°í¼Ò¿µ"ÀÌ Ãâ·ÂµÈ´Ù. ±×·¯³ª ÀÌ ÄÚµå´Â DB¿¡¼­ ÅؽºÆ® ¹Ú½º·Î µ¥ÀÌÅ͸¦ ÀϹæÇâÀ¸·Î Àü¼ÛÇÑ °Í¿¡ ºÒ°úÇØ ÆíÁýÇѴٰųª ´ÙÀ½ ·¹ÄÚµå·Î À̵¿ÇÏÁö´Â ¸øÇÑ´Ù. ÅؽºÆ® ¹Ú½º´Â "°í¼Ò¿µ"ÀÌ ¾îµð¼­ ¿Ô´ÂÁöµµ ¸ð¸£°í Áִ´ë·Î ¹Þ¾Æ Ç¥½Ã¸¸ ÇÒ »ÓÀÌ´Ù.

µ¥ÀÌÅÍ ¼Ò½ºÀÇ Æ¯Á¤ Çʵå¿Í ÄÁÆ®·ÑÀ» ¿¬°áÇÏ·Á¸é ¹ÙÀεùÇØ¾ß ÇÑ´Ù. ¹ÙÀεùÀ̶õ ÄÁÆ®·Ñ°ú µ¥ÀÌÅÍ ¼Ò½º¸¦ ¦Áþ´Â °ÍÀÌ´Ù. ¦À» Áö¿ö ³õÀ¸¸é º°´Ù¸¥ Ãâ·Â¹®À» ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ DBÀÇ ³»¿ëÀÌ ÄÁÆ®·Ñ¿¡ ÀÚµ¿À¸·Î ³ªÅ¸³ª¸ç ÄÁÆ®·ÑÀ» ÆíÁýÇϸé DBÀÇ ³»¿ëµµ °°ÀÌ ¹Ù²ï´Ù. »Ó¸¸ ¾Æ´Ï¶ó DBÀÇ ÇöÀç À§Ä¡°¡ ¹Ù²î¸é ÄÁÆ®·ÑÀÇ ³»¿ëµµ Áï½Ã º¯°æµÈ´Ù.

¸ðµç ÄÁÆ®·ÑÀº DataBindings ÇÁ·ÎÆÛƼ¸¦ °¡Áö¸ç Binding °´Ã¼ÀÇ Ä÷º¼ÇÀÎ ControlBindingsCollection ŸÀÔÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù. Binding °´Ã¼´Â ÄÁÆ®·ÑÀÇ ÇÁ·ÎÆÛƼ¿Í µ¥ÀÌÅÍ ¼Ò½ºÀÇ Æ¯Á¤ Çʵ忡 ´ëÇÑ ¿¬°á Á¤º¸¸¦ °¡Áø´Ù. ÄÁÆ®·Ñ°ú DB´Â Åë»ó 1:1·Î ¿¬°áµÇÁö¸¸ 1:´Ù·Î ¿¬°áµÉ ¼öµµ ÀÖ¾î Ä÷º¼ÇÀ¸·Î °ü¸®ÇÑ´Ù. ÄÁÆ®·ÑÀÇ ÇÁ·ÎÆÛƼ¸¶´Ù ´Ù¸¥ Çʵå¿Í ¿¬°áÇÒ ¼ö Àִµ¥ ¿¹¸¦ µé¾î ÅؽºÆ® ¹Ú½ºÀÇ Text ÇÁ·ÎÆÛƼ´Â Name Çʵå¿Í ¿¬°áÇÏ°í BackColor ÇÁ·ÎÆÛƼ´Â Color Çʵå¿Í ¿¬°áÇÒ ¼ö ÀÖ´Ù.

ÄÁÆ®·Ñ¿¡ ¹ÙÀεùÀ» Ãß°¡ÇÏ·Á¸é ¹ÙÀεù Ä÷º¼ÇÀÇ Add ¸Þ¼­µå¸¦ È£ÃâÇϰųª ¾Æ´Ï¸é Binding °´Ã¼ÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÑ ÈÄ Add ¸Þ¼­µå·Î Binding °´Ã¼¸¦ Àü´ÞÇÑ´Ù. ´ÙÀ½Àº Ä÷º¼Ç Ŭ·¡½ºÀÇ Add ¸Þ¼­µåÀÌ´Ù.

 

public Binding Add (string propertyName,Object dataSource,string dataMember)

 

¹ÙÀεùÇÒ ÄÁÆ®·ÑÀÇ ÇÁ·ÎÆÛƼ, µ¥ÀÌÅÍ ¼Ò½º, µ¥ÀÌÅÍ ¸â¹ö¸¦ Â÷·Ê´ë·Î ÁöÁ¤ÇÑ´Ù. Form1_LoadÀÇ ³¡¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇØ º¸ÀÚ.

 

textBox1.DataBindings.Add("Text", DbADOTest, "tblPeople.Name");

 

ÅؽºÆ® ¹Ú½ºÀÇ Text ÇÁ·ÎÆÛƼ¸¦ DbADOTest µ¥ÀÌÅÍ ÁýÇÕÀÇ tblPeople Å×À̺íÀÇ Name Çʵå¿Í ¿¬°áÇ϶ó´Â ¶æÀÌ´Ù. ÀÌ Äڵ忡 ÀÇÇØ ÅؽºÆ® ¹Ú½º¿¡ ÇʵåÀÇ °ªÀÎ "°í¼Ò¿µ"ÀÌ Ãâ·ÂµÈ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ÅؽºÆ® ¹Ú½º¸¦ ÆíÁýÇϸé DBÀÇ ÇÊµå °ªµµ º¯°æµÈ´Ù.

ÄÁÆ®·ÑÀ» Çʵå¿Í ¹ÙÀεùÇϸé ÄÁÆ®·Ñ»Ó¸¸ ¾Æ´Ï¶ó ±× ºÎ¸ðÀÎ Æû¿¡µµ ¹ÙÀεù Á¤º¸°¡ ±â·ÏµÈ´Ù. ÆûÀÇ BindingContext ÇÁ·ÎÆÛƼ´Â ¹ÙÀεùÀ» °ü¸®ÇÏ´Â BindingManagerBaseÀÇ Ä÷º¼ÇÀÌ´Ù. Æû¿¡´Â ¿©·¯ °³ÀÇ ÄÁÆ®·ÑÀÌ ¹èÄ¡µÇ°í ÄÁÆ®·Ñ¸¶´Ù ´Ù¸¥ Çʵ忡 ¹ÙÀεùÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹ÙÀεù Á¤º¸µµ Ä÷º¼ÇÀÌ´Ù.

BindingContext ¾È¿¡´Â BindingManagerBase·ÎºÎÅÍ ÆÄ»ýµÇ´Â CurrencyManager³ª PropertyManager°¡ ÀúÀåµÈ´Ù. µ¥ÀÌÅÍ ¼Ò½º°¡ ¿©·¯ °³ÀÇ °ªÀ» °¡Áö´Â ¸ñ·ÏÀÎ °æ¿ì CurrencyManager°¡ ÇöÀç À§Ä¡¸¦ °ü¸®ÇÏ¸ç ´ÜÀÏ °ªÀÎ °æ¿ì PropertyManager°¡ ¹ÙÀεùÀ» °ü¸®ÇÑ´Ù. CurrencyManagerÀÇ Position ÇÁ·ÎÆÛƼ¸¦ Áõ°¨½ÃÅ°¸é µ¥ÀÌÅÍ ¼Ò½ºÀÇ ·¹ÄÚµå »çÀ̸¦ À̵¿ÇÒ ¼ö ÀÖ´Ù. Æû¿¡ ¹öÆ° µÎ °³¸¦ ¹èÄ¡ÇÑ ÈÄ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

 

private void btnNext_Click(object sender, EventArgs e) {

         BindingContext[DbADOTest, "tblPeople"].Position++;

}

 

private void btnPrev_Click(object sender, EventArgs e) {

         BindingContext[DbADOTest, "tblPeople"].Position--;

}

 

BindingContext ÇÁ·ÎÆÛƼÀÇ Àε¦¼­·Î tblPeopleÀÇ ¹ÙÀεùÀ» °ü¸®ÇÏ´Â CurrencyManager°´Ã¼¸¦ ã¾Æ ÀÌ °´Ã¼ÀÇ Position ÇÁ·ÎÆÛƼ¸¦ Áõ°¨½ÃÄ×´Ù. ¹öÆ°À» ´©¸£¸é ÀÌÀü, ÀÌÈÄ ·¹ÄÚµå·Î À̵¿Çϸ鼭 ÅؽºÆ® ¹Ú½º¿¡ Ãâ·ÂµÇ´Â Çʵ嵵 Áï½Ã ¹Ù²ï´Ù.

  

»Ó¸¸ ¾Æ´Ï¶ó ÅؽºÆ® ¹Ú½º¸¦ ÆíÁýÇÏ¸é µ¥ÀÌÅÍ ÁýÇÕÀÇ Çʵ嵵 ¹Ù²ï´Ù. ±èÅÂÈñ¸¦ ÀüÁöÇöÀ¸·Î ¹Ù²Û ÈÄ ´ÙÀ½À¸·Î °¬´Ù°¡ ÀÌÀüÀ¸·Î µ¹¾Æ¿Í º¸¸é ¹Ù²î¾î ÀÖ´Ù. ¹ÙÀεù¿¡ ÀÇÇØ ÄÁÆ®·Ñ°ú µ¥ÀÌÅÍ ¼Ò½ºÀÇ Çʵ尡 ¾ç¹æÇâÀ¸·Î ¿¬°áµÈ °ÍÀÌ´Ù. ÀÌ·¸°Ô ÆíÁýµÈ °ªÀ» ¾î´ðÅÍÀÇ Update ¸Þ¼­µå·Î Àü¼ÛÇÏ¸é ¿øº»ÀÇ Çʵ嵵 ¹Ù²ï´Ù.

»õ·Î Ãß°¡µÈ BindingSource¿Í BindingNavigator ÄÁÆ®·ÑÀº ¹ÙÀεùÀ» À§ÇÑ °£Á¢ °èÃþÀ» Á¦°øÇÏ¿© ¹ÙÀεù ÀÛ¾÷À» °£´ÜÇÏ°Ô Ã³¸®ÇÏ¸ç ·¹ÄÚµå »çÀ̸¦ À̵¿Çϰųª ÆíÁýÇÏ´Â »ç¿ëÀÚ UIµµ Á¦°øÇÑ´Ù. ÀÌ ÄÁÆ®·ÑÀº ¸¶¹ý»ç°¡ °ü¸®Çϸç ÁַΠŸÀÔµå µ¥ÀÌÅÍ ÁýÇÕ°ú ÇÔ²² »ç¿ëÇϵµ·Ï ¼³°èµÇ¾î ÀÖ¾î ÄÚµå·Î Å×½ºÆ®Çϱâ´Â ¾î·Æ´Ù. ´ÙÀ½ ÀåºÎÅÍ ¸¶¹ý»ç¿Í ÇÔ²² ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇØ º¼ °ÍÀÌ´Ù.

34-2-5.¸ÊÇÎ

Äڵ忡¼­³ª µ¥ÀÌÅͺ£À̽º¿¡¼­³ª ÁÁÀº À̸§À» ºÙÀÌ´Â °ÍÀº Áß¿äÇϸ鼭µµ ¾î·Á¿î ÀÏÀÌ´Ù. °°Àº ¹üÀ§³»¿¡¼­ Áߺ¹µÇÁö ¸»¾Æ¾ß ÇÏ¸ç ±â¾ïÇϱ⠽±°í ÀÔ·ÂÇϱâ ÆíÇÑ Àû´çÇÑ ±æÀÌÀÇ À̸§À» ã±â ½±Áö ¾Ê´Ù. Äڵ忡¼­´Â ±×³ª¸¶ Áö¿ªº¯¼ö³ª ³×ÀÓ½ºÆäÀ̽º µî À̸§ÀÇ Áߺ¹À» ÇÇÇÒ ¼ö ÀÖ´Â ÀåÄ¡°¡ ÀÖÁö¸¸ µ¥ÀÌÅͺ£À̽ºÀÇ Å×À̺íÀ̳ª Ä÷³¿¡´Â ÀÌ·± ÀåÄ¡°¡ ¾ø´Ù. ±×·¸´Ù º¸´Ï °³¹ßÁß¿¡ ±ÞÇÏ°Ô À̸§À» ºÙ¿© Àǹ̸¦ ÆľÇÇϱâ Èûµé°Å³ª ³Ê¹« ±æ°Ô ÀÛ¼ºÇØ ¾²±â ºÒÆíÇÑ °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù.

¼³»ç ¼ºÀDz¯ À̸§À» Àß ºÙ¿© ³õ¾Ò´Ù ÇÏ´õ¶óµµ ¾ð¾îÀÇ Â÷ÀÌ·Î ÀÎÇØ °ï¶õÀ» °Þ´Â °æ¿ìµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ÀϺ»ÀÇ ÀÚȸ»ç¿¡¼­ Å×À̺íÀ» µðÀÚÀÎÇߴµ¥ °³³ä¾ø´Â ÀϺ» °³¹ßÀÚ°¡ Ä÷³¸íÀ» ÀϺ»¾î·Î ÀÛ¼ºÇß´Ù°í ÇØ º¸ÀÚ. ´å³ÝÀº À¯´ÏÄÚµå ±â¹ÝÀ̾ ÀϺ»¾îµµ ¹®Á¦¾øÀÌ ÀÔÃâ·ÂÇÒ ¼ö ÀÖÁö¸¸ ¹®Á¦´Â ¿ì¸®°¡ ¾²´Â Å°º¸µå°¡ ÀϺ»¾î ÀԷ¿¡ ÀûÇÕÇÏÁö ¾Ê´Ù´Â Á¡ÀÌ´Ù. ÀÌ´Â Çѱ۵µ ¸¶Âù°¡ÁöÀε¥ Çʵå¸íÀ» Çѱ۷ΠºÙ¿© ³õÀ¸¸é ¿Ü±¹ °³¹ßÀÚ´Â °ÅÀÇ È¯ÀåÇØ ¹ö¸± °ÍÀÌ´Ù. ±×·¡¼­ ÄÚµùÇÒ ¶§´Â °¡±ÞÀû ªÀº ¿µ¹® ¸íĪÀ» ±ÇÀåÇÑ´Ù.

¸íĪÀÌ ¹®Á¦°¡ µÇ´Â °æ¿ì´Â ÈçÇÏ´Ù. Áö³ªÄ¡°Ô Ãà¾àÇüÀ¸·Î ÀÛ¼ºÇϰųª ´ë¼Ò¹®ÀÚ ±¸¼ºÀÌ º¹ÀâÇØ ÀÔ·ÂÇϱ⠹ø°Å·Î¿î °æ¿ìµµ ÀÖ°í ÃÖÁ¾ »ç¿ëÀÚ¿¡°Ô ¾ÏÈ£¹®°°Àº ¸íĪµµ ÀÖ´Ù. ¿©·¯ °¡Áö ÀÌÀ¯·Î ¸íĪÀ» ¹Ù²Ù¾î¾ß ÇÏ´Â °æ¿ì°¡ ¿Õ¿Õ Àִµ¥ ¾î´ðÅÍÀÇ ¸ÊÇÎ ±â´ÉÀ» »ç¿ëÇϸé À̸§À» º¯°æÇÒ ¼ö ÀÖ´Ù. Çѱ۸íÀ» ¿µ¹®À¸·Î ¹Ù²Ù¸é °³¹ßÀÚ°¡ ÆíÇØÁö°í ¿µ¹®¸íÀ» Çѱ۷Π¹Ù²Ù¸é ÃÖÁ¾ »ç¿ëÀÚ°¡ º¸±â ½±´Ù.

¾î´ðÅÍÀÇ TableMappings ÇÁ·ÎÆÛƼ´Â µ¥ÀÌÅÍ ¿øº»ÀÇ À̸§°ú º°ÄªÀÇ Â¦À» °ü¸®ÇÑ´Ù. µðÆúÆ®·Î ÀÌ ÇÁ·ÎÆÛƼ´Â ÅÖ ºñ¾î ÀÖ¾î ¿øº»ÀÇ À̸§À» »ç¿ëÇÏÁö¸¸ º°ÄªÀ» ÁÖ¸é ÀÌÈĺÎÅÍ ÁöÁ¤µÈ º°ÄªÀ» »ç¿ëÇÑ´Ù. º°µµÀÇ ¿¹Á¦¸¦ ¸¸µé ÇÊ¿ä ¾øÀÌ DataAdapterTest ¿¹Á¦¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇØ º¸ÀÚ. Fill ¸Þ¼­µå¸¦ È£ÃâÇϱâ Àü¿¡ ¸ÊÇÎ Ä÷º¼ÇÀ» »ý¼ºÇÑ´Ù.

 

using System.Data.Common;

 

private void btnOpen_Click(object sender, EventArgs e) {

....

         DataTableMapping Mapper= Adpt.TableMappings.Add("Table", "tblPeople");

         Mapper.ColumnMappings.Add("Name", "À̸§");

         Mapper.ColumnMappings.Add("Age", "³ªÀÌ");

         Mapper.ColumnMappings.Add("Male", "¼ºº°");

 

         Adpt.Fill(tblPeople);

         dataGridView1.DataSource = tblPeople;

}

 

TableMappings ÇÁ·ÎÆÛƼ´Â DataTableMapping °´Ã¼ÀÇ Ä÷º¼ÇÀε¥ ÀÌ Å¬·¡½º´Â System.Data.Common ³×ÀÓ½ºÆäÀ̽º¿¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î using ¼±¾ðÀ» ÇØ¾ß ÇÑ´Ù. ÇÑ ¾î´ðÅÍ·Î ¿©·¯ °³ÀÇ Å×À̺íÀ» °ü¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î Å×ÀÌºí¸¶´Ù Çϳª¾¿ÀÇ DataTableMapping °´Ã¼°¡ ÇÊ¿äÇÏ¸ç ±×·¡¼­ TableMappings´Â Ä÷º¼ÇÀÌ´Ù. ÀÌ Ä÷º¼ÇÀÇ Add ¸Þ¼­µå·Î »õ·Î¿î DataTableMapping °´Ã¼¸¦ »ý¼ºÇÑ´Ù.

 

public DataTableMapping Add (string sourceTable,string dataSetTable)

 

DataTableMappingÀÇ ColumnMappings ÇÁ·ÎÆÛƼ´Â DataColumnMapping °´Ã¼ÀÇ Ä÷º¼ÇÀÌ´Ù. ÇÑ Å×ÀÌºí¿¡ ¿©·¯ °³ÀÇ Ä÷³ÀÌ ÀÖÀ¸¹Ç·Î ÀÌ ¿ª½Ã Ä÷º¼ÇÀÌ´Ù. ÀÌ Ä÷º¼ÇÀÇ Add ¸Þ¼­µå·Î »õ·Î¿î DataColumnMapping °´Ã¼¸¦ »ý¼ºÇÑ´Ù.

 

public DataColumnMapping Add (string sourceColumn, string dataSetColumn)

 

Àμö·Î ¿øº»ÀÇ Ä÷³¸í°ú ÀÌÈÄ »ç¿ëÇÒ Ä÷³¸íÀ» Àü´ÞÇÑ´Ù. ¿¹Á¦¿¡¼­´Â ¼¼ °³ÀÇ Ä÷³ ¸ÊÇÎÀ» Ãß°¡ÇÏ¿© ¿µ¹®À¸·Î µÈ Ä÷³¸í¿¡ Çѱ۷ΠµÈ º°¸íÀ» ºÙ¿´´Ù. ¸ÊÇÎÀ» ´Ù ¸¸µç ÈÄ Fill·Î ä¿ì¸é ¸ÊÇÎÀ» ÂüÁ¶ÇÏ¿© µ¥ÀÌÅÍ ÁýÇÕÀÇ Å×À̺í, Ä÷³¸íÀ» ¸¸µç´Ù. tblPeopleÀÇ ¿­ À̸§ÀÌ Çѱ۷Πº¯°æµÇ¾î ±×¸®µå »ó´ÜÀÇ Çì´õ¿¡ Ãâ·ÂµÈ´Ù.

Çʵå¸íÀÌ º¹ÀâÇϰųª ºñÁ÷°üÀûÀ̶ó¸é Ä£¼÷ÇÏ°í ½¬¿î À̸§À» Á¦°øÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¾Æ¹«·¡µµ Name, Age º¸´Ù´Â À̸§, ³ªÀÌ°¡ Àбâ ÁÁ´Ù. ´õ °£´ÜÇÏ°Ô ¼­¹ö¿¡ Å×À̺íÀ» ¿äûÇÒ ¶§ºÎÅÍ º°ÄªÀ» ÁÖ´Â ¹æ¹ýÀÌ Àִµ¥ SQL¹®À» ÀÛ¼ºÇÒ ¶§ AS Å°¿öµå·Î º°ÄªÀ» ÁöÁ¤ÇÑ´Ù.

 

Adpt = new SqlDataAdapter("SELECT NAME AS À̸§, AGE AS ³ªÀÌ, Male AS ¼ºº° FROM tblPeople", Con);

 

³»ºÎÀûÀÎ À̸§°ú ¿ÜºÎÀûÀÎ À̸§ÀÌ ´Þ¶ó¾ß ÇÏ´Â °æ¿ì°¡ ÈçÇØ SQLµµ ¼­¹ö Â÷¿ø¿¡¼­ ¿­À̳ª Å×À̺íÀÇ À̸§À» º¯°æÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ¼­¹ö¿¡¼­ ÀÐÈú ¶§ºÎÅÍ ¾Æ¿¹ º°ÄªÀ¸·Î ÀÐÇôÁö´Âµ¥ ÀÌ ¹æ¹ýÀÌ ´õ °£´ÜÇÏ´Ù.