lecture Home > ASP.NET > ±ôÂïÀÌÀÇ ADO.NET

±ôÂï¾Æ, ADO.NET??? ADO.NET!!!

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2002³â 03¿ù 18ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2002³â 03¿ù 20ÀÏ

   ÀÛ¼ºÀÚ : ±ôÂïÀÌ(¹Ú ¼öÀÎ)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : ·¹Äڵ带 ºÒ·¯¿ÀÀÚ. - DataReader


¾È³çÇϼ¼¿ä.
¾î´Àµ¡ º½ÀÌ ¿Â °Í °°³×¿ä.
»¡¸® »¡¸® °­Á¸¦ ¿Ã·Á¼­ °£´ÜÇÑ °­Á¸¦ ³¡³»¾ß °Ú´Ù°í »ý°¢Àº ¸¹ÀÌ Çϰí Àִµ¥ ±×°Ô ½±Áö°¡ ¾Ê³×¿ä.
¿À´Ã±îÁö ÀÌ·¸°Ô µ¥ÀÌÅ͸¦ ºÒ·¯¿À´Â °ÍÀ¸·Î .NET Data Provider¿¡ ´ëÇØ¼­´Â °£´ÜÇÏ°Ô ¸¶Ä¡°í, ´ÙÀ½ °­ÁºÎÅÍ´Â DataSet¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸´Â °ÍÀ¸·Î ÇϰڽÀ´Ï´Ù.
±×·³ ½ÃÀÛÇϰڽÀ´Ï´Ù.

½ÃÀÛ Àü¿¡ Àá½Ã Àâ´ã...
Á¦ Ã¥ÀÌ À̹ø ÁÖ ¾È¿¡ ³ª¿À°Ú³×¿ä...
°­Á¿¡¼­º¸´Ù ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ÀÖ´Â Á¦ Ã¥, ¸¹Àº ¼º¿ø ¹Ù¶ø´Ï´ç~~~ ^^;;

DataReader Ŭ·¡½º´Â °£·«ÇÏ°Ô ¸»ÇÏ¸é µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áµÈ »óÅ¿¡¼­ Àбâ Àü¿ë( read-only ), ÀüÁø Àü¿ë( forward-only )ÀÇ ·¹ÄÚµå¼ÂÀ¸·Î ºÒ·¯¿À´Â Ŭ·¡½ºÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ µ¥ÀÌÅ͸¦ ºÒ·¯¿À´Â ±â´ÉÀ» Çϴ Ŭ·¡½º Áß¿¡ °¡Àå ¼º´ÉÀÌ ÁÁÀº °ÍÀÔ´Ï´Ù. ´ÙÀ½Àº DataReaderÀÇ Æ¯Â¡ÀÔ´Ï´Ù.

• DataReader °´Ã¼ÀÇ ·¹ÄÚµå¼ÂÀº Àбâ Àü¿ëÀÔ´Ï´Ù.
• DataReader °´Ã¼ÀÇ ·¹ÄÚµå¼ÂÀº ÀüÁø Àü¿ëÀÔ´Ï´Ù. µû¶ó¼­ ÆäÀÌ¡À» »ç¿ëÇϰųª
   Ã³À½ÀÇ ·¹ÄÚµå·Î °¡´Â µîÀÇ ´Ù¾çÇÑ ±â´ÉÀº °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù.
• DataReader°¡ ¿­·ÁÀÖ´Â µ¿¾ÈÀº Connection °´Ã¼¸¦ ÀÌ¿ëÇØ¼­ ´Ù¸¥ ÀÏÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù.
   ÀÌ´Â DataReader°¡ ¿¬°á ÁöÇâÀûÀÎ ·¹ÄÚµå¼ÂÀ̱⠶§¹®ÀÔ´Ï´Ù.

DataReader¸¦ ÀÌ¿ëÇØ¼­ ´Ü¼øÇÏ°Ô ·¹ÄÚµå¼ÂÀ» °¡Á®¿Ã ¼ö ÀÖÀ» »Ó ¾Æ´Ï¶ó, ¿©·¯ °³ÀÇ ·¹ÄÚµå¼ÂÀ» °¡Á®¿Ã ¼öµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ ÀúÀå ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇØ¼­ ·¹ÄÚµå¼ÂÀ» °¡Á®¿Ã ¼öµµ ÀÖ½À´Ï´Ù. À̹ø °­Á¿¡¼­´Â °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â Command °´Ã¼ÀÇ ExecuteReader()¸¦ ÀÌ¿ëÇÑ ¿¹Á¦¸¦ ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½Àº DataReader¸¦ ÀÌ¿ëÇØ¼­ ·¹ÄÚµå¼ÂÀ» °¡Á®¿À´Â ¼ø¼­ÀÔ´Ï´Ù.

¨Í Connection °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
¨Î Command °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
¨Ï Command °´Ã¼ÀÇ CommandText ÇÁ·ÎÆÛƼ¿¡ Äõ¸®¹®À̳ª ÀúÀå ÇÁ·Î½ÃÀú¸¦ ¼³Á¤ÇÕ´Ï´Ù.
¨Ð Command °´Ã¼ÀÇ CommandType ÇÁ·ÎÆÛƼ¿¡ ½ÇÇàµÉ Äõ¸®¹®ÀÇ Á¾·ù¸¦ ¼³Á¤ÇÕ´Ï´Ù.
¨Ñ Command °´Ã¼ÀÇ Connection ÇÁ·ÎÆÛƼ¿¡ Connection °´Ã¼¸¦ ¼³Á¤ÇØÁÝ´Ï´Ù.
¨Ò Connection °´Ã¼ÀÇ Open() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ¿­¾îÁÝ´Ï´Ù.
¨Ó Command °´Ã¼ÀÇ ExecuteReader() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ÇØ´ç Äõ¸®¹®À̳ª ÀúÀå ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇØ¼­
    DataReader °´Ã¼¿¡ ·¹ÄÚµå¼ÂÀ» ³Ö½À´Ï´Ù.
¨Ô DataReaderÀÇ Read() ¸Þ¼­µå¸¦ È£ÃâÇØ¼­ °¢°¢ÀÇ ·¹Äڵ忡 ´ëÇÑ Ã³¸®¸¦ ÇÕ´Ï´Ù.
¨Õ ÇØ´ç 󸮰¡ ³¡³µÀ¸¸é DataReaderÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© DataReader °´Ã¼¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
¨Ö Connection °´Ã¼ÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ´Ý¾ÆÁÝ´Ï´Ù.

À̹ø¿¡µµ ¿ª½Ã Äõ¸®¹®À» Á÷Á¢ ÀÔ·ÂÇØ¼­ µ¥ÀÌÅ͸¦ ºÒ·¯¿À´Â ¹æ¹ý°ú sp¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅ͸¦ ºÒ·¯¿À´Â ¹æ¹ýÀ» ¸ðµÎ ÀÌ¿ëÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½Àº µ¥ÀÌÅ͸¦ ºÒ·¯¿À´Â spÀÔ´Ï´Ù.

Create Proc up_SelectAllAddress
As
Begin
    Select    *
    From    Address
End

¹°·Ð ´õ º¹ÀâÇÑ sp¸¦ »ç¿ëÇÒ ¼öµµ ÀÖÁö¸¸ °£´ÜÇÏ°Ô »ç¿ëÇϱâ À§Çؼ­ À§¿Í °°Àº sp¸¦ ÀÛ¼ºÇß½À´Ï´Ù.
À§ÀÇ sp´Â Àá½Ã ÈÄ¿¡ ´Ù·çµµ·Ï ÇÏ°í ¸ÕÀú Á÷Á¢ Äõ¸®¹®À» ÀÔ·ÂÇØ¼­ ¸¸µé¾îº¸µµ·Ï ÇϰڽÀ´Ï´Ù. »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» DataReaderEx·Î ÇÕ´Ï´Ù. »õ ÇÁ·ÎÁ§Æ® ´ëÈ­»óÀÚ´Â ¾ÕÀÇ °­Á¿¡¼­ ¸î ¹ø º¸¿©µå·ÈÀ¸´Ï±î ÀÌÁ¦ºÎÅÍ´Â ±×¸²À¸·Î º¸¿©µå¸®Áö´Â ¾Ê°Ú½À´Ï´Ù.
»õ ÇÁ·ÎÁ§Æ®°¡ »ý¼ºÀÌ µÇ¸é ÄÚµå ÆíÁý±â¿¡ ´ÙÀ½ÀÇ Äڵ带 ÀÔ·ÂÇÕ´Ï´Ù.

using System;
using System;
using System.Data;
using System.Data.SqlClient;

namespace DataReaderEx
{
    public class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Connection °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
            SqlConnection connection = new SqlConnection( "server=localhost;"
                + "database=Study;uid=sa;pwd=tndls" );

            GetRecordByTSql( connection );
        }// Main ¸Þ¼­µå ³¡

        static void GetRecordByTSql( SqlConnection connection )
        {
            // Command °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
            SqlCommand command = new SqlCommand( "Select * From Address", connection );

            // Command °´Ã¼ÀÇ CommandType ÇÁ·ÎÆÛƼ¿¡ ½ÇÇàµÉ Äõ¸®¹®ÀÇ Á¾·ù¸¦ ¼³Á¤ÇÕ´Ï´Ù.
            command.CommandType = CommandType.Text;

            // Connection °´Ã¼ÀÇ Open() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ¿­¾îÁÝ´Ï´Ù.
            connection.Open();

            // Command °´Ã¼ÀÇ ExecuteReader() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ÇØ´ç Äõ¸®¹®À̳ª
            // ÀúÀå ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇØ¼­ DataReader °´Ã¼¿¡ ·¹ÄÚµå¼ÂÀ» ³Ö½À´Ï´Ù.
            SqlDataReader reader = command.ExecuteReader();

            // DataReaderÀÇ Read() ¸Þ¼­µå¸¦ È£ÃâÇØ¼­ °¢°¢ÀÇ ·¹Äڵ忡 ´ëÇÑ Ã³¸®¸¦ ÇÕ´Ï´Ù.
            while ( reader.Read() )
            {
                Console.WriteLine( "{0}\t{1}\t{2}", reader["ID"], reader["Name"]
                    , reader["Email"] );
            }

            // ÇØ´ç 󸮰¡ ³¡³µÀ¸¸é DataReaderÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿©
            // DataReader °´Ã¼¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
            reader.Close();

            // Connection °´Ã¼ÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
            connection.Close();
        }    // GetRecordByTSql ¸Þ¼­µå ³¡
    }    // Ŭ·¡½º ³¡
}

¾î¶²°¡¿ä? ±âÁ¸ÀÇ RecordSet°ú´Â ´Ù¼Ò Â÷À̰¡ Á¶±Ý ÀÖÁÒ?
±×·¡µµ °ÆÁ¤ÇÏÁö ¸¶¼¼¿ä. ±× ³ÑÀÌ ±× ³ÑÀ̶ø´Ï´Ù. ^^
ÀÏ´Ü ÁÖÀÇ ±í°Ô º¸½Ç ºÎºÐÀº ´ÙÀ½ÀÇ µÎ °¡Áö Á¤µµ ¹Û¿¡ ¾øÀ» °Í °°³×¿ä...

// Command °´Ã¼ÀÇ ExecuteReader() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ÇØ´ç Äõ¸®¹®À̳ª
// ÀúÀå ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇØ¼­ DataReader °´Ã¼¿¡ ·¹ÄÚµå¼ÂÀ» ³Ö½À´Ï´Ù.
SqlDataReader reader = command.ExecuteReader();

À§ÀÇ ¼Ò½º¿¡¼­ º¸¸é Command °´Ã¼ÀÇ ExecuteReader() ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ DataReader °´Ã¼¿¡ ·¹Äڵ带 ³Ö¾îÁÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖÁÒ? ±âÁ¸ÀÇ RecordSetÀº Open() À¸·Î ·¹Äڵ带 °¡Á®¿À´Â °Í°ú´Â ¾à°£ ´Ù¸¥ ¹æ½ÄÀ» º¸À̰í Àֳ׿ä.

// DataReaderÀÇ Read() ¸Þ¼­µå¸¦ È£ÃâÇØ¼­ °¢°¢ÀÇ ·¹Äڵ忡 ´ëÇÑ Ã³¸®¸¦ ÇÕ´Ï´Ù.
while ( reader.Read() )
{
    Console.WriteLine( "{0}\t{1}\t{2}", reader["ID"], reader["Name"]
        , reader["Email"] );
}

ÀÌ ¼Ò½º ¿ª½Ã Á» ´Ù¸£ÁÒ? RecordSetÀº EOF ¶Ç´Â BOF¸¦ È®ÀÎÇÏ°í ·¹Äڵ尡 ÀÖÀ» ¶§¿¡¸¸ ·çÇÁ¸¦ µ¹ ¼ö ÀÖµµ·Ï ±¸ÇöÇØ¾ß Çߴµ¥, DataReader °´Ã¼ÀÇ Read() ¸Þ¼­µå¸¦ È£ÃâÇÔÀ¸·Î½á ±× ³ëµ¿À» ÁÙÀÏ ¼ö ÀÖ°Ô ‰ç½À´Ï´Ù.
Read() ¸Þ¼­µå´Â ·¹Äڵ尡 ÀÖÀ» °æ¿ì¿¡´Â true¸¦ ¸®ÅÏÇÏ°í ¾øÀ» °æ¿ì¿¡´Â false¸¦ ¸®ÅÏÇØ¼­ °³“uÀÚ°¡ ±× ¸®ÅϰªÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù.
¸¹ÀÌ ÁÁ¾ÆÁ³ÁÒ?

// ÇØ´ç 󸮰¡ ³¡³µÀ¸¸é DataReaderÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿©
// DataReader °´Ã¼¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
reader.Close();

¿ª½Ã ¸®¼Ò½º¸¦ »ç¿ëÇßÀ¸¸é ¸®¼Ò½º¸¦ ¹ÝȯÇÏ´Â ºÎºÐÀÔ´Ï´Ù.
ÀÌÁ¦ ºôµå¸¦ ÇϽðí ( Ctrl + Shift + B ) ½ÇÇàÀ» ÇØ º¸¼¼¿ä. ( Ctrl + F5 )

ÀÚ, À§¿Í °°ÀÌ °á°ú È­¸éÀÌ ³ª¿À³ª¿ä?
³Ê¹« °£´ÜÇÏÁÒ?
¿©·¯ºÐ Áß¿¡´Â "¿Ö ÀÚ²Ù Äָܼ¸ Çϴ°žß?" ¶ó°í ºÒÆòÇϽô ºÐÀÌ °è½ÇÁö ¸ð¸£°Ú³×¿ä.
ÇÏÁö¸¸ ÀÌ·¸°Ô ÄܼÖÀ» ÇÏ°í ³ª¸é ³ªÁß¿¡ À©µµ¿ì³ª À¥ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱⰡ ÈξÀ ½¬¿öÁú °ÍÀ̶ó´Â °ÍÀ» ¾Ë°Ô µÉ °Å¿¹¿ä.
À̹ø¿¡´Â sp¸¦ ÀÌ¿ëÇØ¼­ ·¹Äڵ带 °¡Á®¿Àµµ·Ï ÇϰڽÀ´Ï´Ù.
À§ÀÇ ¼Ò½º¸¦ ¾à°£ ¼öÁ¤Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
¼Ò½º¿¡¼­ ´ÙÀ½ÀÇ ¸Þ¼­µå¸¦ Çϳª Ãß°¡ÇÕ´Ï´Ù. ¸Þ¼­µåÀÇ À̸§Àº GetRecordBySP ÀÔ´Ï´Ù.

static void GetRecordBySP( SqlConnection connection )
{
    // Command °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
    SqlCommand command = new SqlCommand( "up_SelectAllAddress", connection );

    // Command °´Ã¼ÀÇ CommandType ÇÁ·ÎÆÛƼ¿¡ ½ÇÇàµÉ Äõ¸®¹®ÀÇ Á¾·ù¸¦ ¼³Á¤ÇÕ´Ï´Ù.
    command.CommandType = CommandType.StoredProcedure;

    // Connection °´Ã¼ÀÇ Open() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ¿­¾îÁÝ´Ï´Ù.
    connection.Open();

    // Command °´Ã¼ÀÇ ExecuteReader() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ÇØ´ç Äõ¸®¹®À̳ª
    // ÀúÀå ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇØ¼­ DataReader °´Ã¼¿¡ ·¹ÄÚµå¼ÂÀ» ³Ö½À´Ï´Ù.
    SqlDataReader reader = command.ExecuteReader();

    Console.WriteLine( "==== SP¸¦ ÀÌ¿ëÇØ¼­ °¡Á®¿Â ·¹ÄÚµå ====" );

    // DataReaderÀÇ Read() ¸Þ¼­µå¸¦ È£ÃâÇØ¼­ °¢°¢ÀÇ ·¹Äڵ忡 ´ëÇÑ Ã³¸®¸¦ ÇÕ´Ï´Ù.
    while ( reader.Read() )
    {
        Console.WriteLine( "{0}\t{1}\t{2}", reader["ID"], reader["Name"]
            , reader["Email"] );
    }

    // ÇØ´ç 󸮰¡ ³¡³µÀ¸¸é DataReaderÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿©
    // DataReader °´Ã¼¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
    reader.Close();

    // Connection °´Ã¼ÀÇ Close() ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅͺ£À̽º¸¦ ´Ý¾ÆÁÝ´Ï´Ù.
    connection.Close();
}

À§¿¡¼­ º¼µåü·Î ó¸®ÇÑ µÎ ºÎºÐ¸¸ Á¶±Ý ´Ù¸¨´Ï´Ù.
Äõ¸®¹®À» ¼³Á¤ÇÏ´Â ¹æ¹ýÀε¥ À§¿Í °°ÀÌ sp ¸¦ »ç¿ëÇÒ ¶§¿¡´Â ¹Ýµå½Ã Command °´Ã¼ÀÇ CommandTypeÀ» StoredProcedure¶ó°í ¸í½Ã¸¦ ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ÀÏ¹Ý Äõ¸®¹®À¸·Î ÀνÄÇØ¼­ ¿¡·¯°¡ ¹ß»ýÇϰŵç¿ä...
À§¿¡¼­ ÀÛ¼ºÇÑ ¸Þ¼­µå¸¦ Main ¸Þ¼­µå¿¡¼­ È£ÃâÇÏ´Â Äڵ带 Ãß°¡Çϰí ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.

À̹ø °­Á¿¡ »ç¿ëÇÑ ¼Ò½º ÆÄÀÏÀº Á¦ ȨÆäÀÌÁöÀÇ °ø°³ ¼Ò½º ÀÚ·á½Ç¿¡¼­ ´Ù¿îÀ» ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù.
°£´ÜÇÏÁö¸¸ DataReader Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ´ÙÀ½¿¡´Â DataSet¿¡ ´ëÇÑ °£´ÜÇÑ ³»¿ëÀ» ÁغñÇØº¸°Ú½À´Ï´Ù.
¿©·¯ºÐµé ¸ðµÎ ÁÁÀº ÇÏ·ç µÇ½Ã±¸¿ä...
±×·³ À̸¸...

Written By ±ôÂïÀÌ
HomePage : http://www.cuteguy.pe.kr

Back