SQL ¼­¹ö·Î Äõ¸®¸¦ ³¯¸®¸é Å¥°ø°£ ¶Ç´Â ¹öÆÛ°¡ ºÎÁ·ÇÏ´Ù´Â ¸Þ½ÃÁö°¡ ³ª¿É´Ï´Ù.

¹«¾Æ   
   Á¶È¸ 1608   Ãßõ 0    

쪽팔리면 질문하지 맙시다. 소중한 답변 댓글을 삭제하는건 부끄러운 일 입니다 

아래와 같이 에러 메시지가 나오면서 서버로 데이터가 올라가지 않습니다.

처음에는 잘 올라가다가 나중에 저러고 있는데

쿼리를 날리는 프로그램을 재시작 하면 또 잘 올라가고 일정 시간(횟수)가 지나면 다시 재발합니다.


======= 에러 메세지 ==================

SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 

서버를 찾을 수 없거나 액세스할 수 없습니다. 

인스턴스 이름이 올바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오.

(provider: TCP Provider, error: 0 - 큐 공간 또는 버퍼가 부족하여 소켓에서 해당 작업을 진행하지 못했습니다.)

=====================================


구글링을 해봐도 원인을 모르겠네요. SQL쪽으로 커넥션을 오래열고 있어서 그렇다는 글도 있던데

아래 코드처럼 쿼리를 날릴 때 마다 함수를 호출하여 켜넥션 하고 쿼리 날리고 연결을 끊어주고 있습니다.

무슨 문제가 있을까요?


       public bool WriteDB(string query, bool bReadUncommitted, out string errorMsg)
       {
           bool ret = false;
           errorMsg = "";
           SqlConnection connection = null;
           string connectString = getConnectionString();
           using (connection = new SqlConnection(connectString))
           {
               try
               {
                   connection.Open();
                   SqlTransaction sqlTran;
                   if (bReadUncommitted)
                       sqlTran = connection.BeginTransaction(IsolationLevel.ReadUncommitted);
                   else
                       sqlTran = connection.BeginTransaction();
                   SqlCommand command = connection.CreateCommand();
                   command.Transaction = sqlTran;
                   command.CommandText = query;
                   command.ExecuteNonQuery();
                   try
                   {
                       sqlTran.Commit();
                       ret = true;
                   }
                   catch (Exception)
                   {
                       try
                       {
                           sqlTran.Rollback();
                       }
                       catch (Exception ex)
                       {
                           errorMsg = ex.Message;
                       }
                   }
               }
               catch (Exception ex)
               {
                   errorMsg = ex.Message;
               }
               finally
               {
                   connection.Close();
               }
           }
           return ret;
       }

...
ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
Á¤¹«Çö 04-03
ÀÚ¹Ù´Â Àß ¾ËÁö ¸øÇÏÁö¸¸ ±×³É ´øÀú º¾´Ï´Ù.

connection = new SqlConnection(connectString)
·Î ¸¸µç °´Ã¼°¡ °¡ºñÁö Ä÷ºÅÍ¿¡ÀÇÇؼ­ ÇØÁ¦°¡ ¾ÈµÇ´Â °ÍÀϼöµµ À־ÀÔ´Ï´Ù.
 finally
{
    connection.Close();
    connection = null; <- ÀÌ°Å Ãß°¡Çؼ­ ¸í½ÃÀûÀ¸·Î ÂüÁ¶ ÇØÁ¦ ó¸®ÇØÁÖ´Â°Ç ¾î¶³±î¿ä?
}


µÇ¸é ÁÁ°í ¾ÈµÇ¸é ¸»ÁÒ ¤Ð¤Ð

ÀÌ¿Ü¿¡µµ ¾îµò°¡new·Î ¸¸µç°ÍÀÌ °¡ºñÁöÄ÷ºÅÍ¿¡ ÀÇÇØ ÇØÁ¦µÇÁö ¾Ê´Â °ÍÀÌ ÀÖ´ÂÁö
ÇѶ¡ÇѶ¡ »ìÆ캸´Â¼ö¹Û¿¡ ¾ø°Ú³×¿ä...
SqlTransaction sqlTran;
SqlCommand command;
¶ó´ø°¡..
     
¹«¾Æ 04-03
´äº¯ °¨»çÇÕ´Ï´Ù.  Âü°íÇÏ¿© Å×½ºÆ® Çغ¸°Ú½À´Ï´Ù
ÀÚ¹Ùó·³ »ý°å´Âµ¥, c# ÄÚµå³×¿ä.
MS²¨´Ï±ñ.. ÄÚÆÄÀÏ·µÇÑÅ× ¹°¾îºÃ½À´Ï´Ù.

ÀÌ Äڵ忡¼­ ¸î °¡Áö ¹®Á¦Á¡À» ¹ß°ßÇß½À´Ï´Ù. ¾Æ·¡¿¡¼­ °¢ ¹®Á¦¸¦ ¼³¸íÇÏ°í ¼öÁ¤ ¹æ¹ýÀ» Á¦½ÃÇÏ°Ú½À´Ï´Ù:

- ¸®¼Ò½º ´©¼ö (Resource Leak):
    SqlConnection°ú SqlTransactionÀº using ºí·Ï ³»¿¡¼­ »ý¼ºµÇ¾úÁö¸¸, connection.Close()°¡ È£ÃâµÇ±â Àü¿¡ ¸Þ¸ð¸®¿¡¼­ ÇØÁ¦µÇÁö ¾Ê½À´Ï´Ù.
    ÀÌ·Î ÀÎÇØ ¸®¼Ò½º ´©¼ö°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ÇØ°á ¹æ¹ý: using ºí·Ï ³»¿¡¼­ connection°ú sqlTranÀ» »ý¼ºÇÏ°í, connection.Close()¸¦ È£ÃâÇÏ¿© ¸®¼Ò½º¸¦ ¸í½ÃÀûÀ¸·Î ÇØÁ¦Çϼ¼¿ä.

- Æ®·£Àè¼Ç ó¸® ¹®Á¦
    Æ®·£Àè¼Ç ó¸® ºÎºÐ¿¡¼­ ÁßøµÈ try-catch ºí·ÏÀÌ ÀÖ½À´Ï´Ù.
    sqlTran.Commit()ÀÌ ¼º°øÇϸé retÀÌ true·Î ¼³Á¤µÇÁö¸¸, ¸¸¾à Commit()ÀÌ ½ÇÆÐÇϸé Rollback()À» ½ÃµµÇÕ´Ï´Ù.
    ÇÏÁö¸¸ Rollback()µµ ½ÇÆÐÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ °æ¿ì errorMsg¿¡ ¿¹¿Ü ¸Þ½ÃÁö¸¦ ¼³Á¤ÇÏ°í retÀº ¿©ÀüÈ÷ false·Î À¯ÁöµË´Ï´Ù.
    ÇØ°á ¹æ¹ý: Rollback() ½Ã¿¡µµ retÀ» false·Î ¼³Á¤ÇÏ°í, errorMsg¸¦ ¼³Á¤Çϼ¼¿ä.

public bool WriteDB(string query, bool bReadUncommitted, out string errorMsg)
{
    bool ret = false;
    errorMsg = "";
    string connectString = getConnectionString();

    using (SqlConnection connection = new SqlConnection(connectString))
    {
        try
        {
            connection.Open();
            SqlTransaction sqlTran;

            if (bReadUncommitted)
                sqlTran = connection.BeginTransaction(IsolationLevel.ReadUncommitted);
            else
                sqlTran = connection.BeginTransaction();

            SqlCommand command = connection.CreateCommand();
            command.Transaction = sqlTran;
            command.CommandText = query;

            try
            {
                command.ExecuteNonQuery();
                sqlTran.Commit();
                ret = true;
            }
            catch (Exception ex)
            {
                sqlTran.Rollback();
                errorMsg = ex.Message;
            }
        }
        catch (Exception ex)
        {
            errorMsg = ex.Message;
        }
    }

    return ret;
}

ÀÌ ¼öÁ¤µÈ ÄÚµå´Â ¸®¼Ò½º ´©¼ö¸¦ ¹æÁöÇÏ°í Æ®·£Àè¼Ç 󸮸¦ °³¼±Çϸç, Äõ¸® ½ÇÇà °á°ú¸¦ ÀûÀýÇÏ°Ô Ã³¸®ÇÕ´Ï´Ù
     
¹«¾Æ 04-03
´äº¯ °¨»çÇÕ´Ï´Ù.  Âü°íÇÏ¿© Å×½ºÆ® Çغ¸°Ú½À´Ï´Ù
SqlTransaction°ú SqlCommand´Â »ç¿ë ÈÄ¿¡ DisposeÇØÁà¾ßÇÕ´Ï´Ù. ¹öÀüÀÌ ¾î¶²Áö ¸ô¶ó¼­ ¿ì¼± usingÀ¸·Î ·¦ÇÎÇÑ ÄÚµåÀÔ´Ï´Ù

        public bool WriteDB(string query, bool bReadUncommitted, out string errorMsg)
        {
            bool ret = false;
            errorMsg = "";
            SqlConnection connection = null;
            string connectString = getConnectionString();
            using (connection = new SqlConnection(connectString))
            {
                try
                {

                    connection.Open();

                    using (SqlTransaction sqlTran = bReadUncommitted ? connection.BeginTransaction(IsolationLevel.ReadUncommitted) : connection.BeginTransaction())
                    {

                        using (SqlCommand command = connection.CreateCommand())
                        {

                            command.Transaction = sqlTran;
                            command.CommandText = query;
                            command.ExecuteNonQuery();

                            try
                            {
                                sqlTran.Commit();
                                ret = true;
                            }
                            catch (Exception)
                            {
                                try
                                {
                                    sqlTran.Rollback();
                                }
                                catch (Exception ex)
                                {
                                    errorMsg = ex.Message;
                                }
                            }

                        }

                    }
                }
                catch (Exception ex)
                {
                    errorMsg = ex.Message;
                }
                finally
                {
                    connection.Close();
                }
            }
            return ret;
        }
     
¹«¾Æ 04-03
´äº¯ °¨»çÇÕ´Ï´Ù.
 using (SqlTransaction sqlTran = bReadUncommitted ? connection.BeginTransaction(
ÀÌ ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê´Â  (ÀÌÈÄ¿¡ using À¸·Î  connection »ý¼º) ¹®Á¦°¡ Àֳ׿ä ^^
°°Àº ±íÀÌÀÇ try catch finally ºí·Ï¿¡¼­ close ÇØ¾ß Á¤»óÀûÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. Å¥°¡ ¾ø´Ù°í ÇÏ´Â À̾߱â´Â °è¼Ó ¿­±â¸¸ ÇÏ°í(Á¢¼ÓÁß) Á¾·á󸮰¡¤Ì¾ÈµÇ¾î ÇÑ°èÄ¡¿¡ µµ´ÞÇßÀ»¶§ ÀϹÝÀûÀ¸·Î ³ª¿À´À´©¿¡·¯ ¸Þ¼¼Áö ÀÔ´Ï´Ù.


QnA
Á¦¸ñPage 109/5686
2014-05   4972127   Á¤ÀºÁØ1
2015-12   1508454   ¹é¸Þ°¡
2016-06   16382   ÇÏÇÏÁø
2002-05   16380   ¼Û°æ¹Î
2017-12   16373   Ãʺ¸IT
2013-12   16370   °Ü¿ï³ª¹«
2002-08   16369   Á¤±¤ÈÆ
2018-11   16367   ÇÞ»ìÇѽºÇ¬
2009-12   16361   ³²¼º·æ
2002-05   16359   ±èµ¿·ü
2018-12   16358   Çϼ¿È£ÇÁ
2002-08   16357   ±èµ¿¹Î
2015-09   16357   żº±â±è
2013-05   16352   ±è°Ç¿ì
2002-05   16349   Á¤ÁØÈ£
2009-06   16348   °³¶ËÀ̳×
2002-05   16347   ¼Û°æ¹Î
2016-06   16343   ±è°Ç¿ì
2013-09   16341   ȲÁø¿ì
2002-05   16340   Çѽ¸ñ
2002-05   16337   Á¤»ó¿ë
2019-09   16334   ±¸½ÊÆò