쪽팔리면 질문하지 맙시다. 소중한 답변 댓글을 삭제하는건 부끄러운 일 입니다
아래와 같이 에러 메시지가 나오면서 서버로 데이터가 올라가지 않습니다.
처음에는 잘 올라가다가 나중에 저러고 있는데
쿼리를 날리는 프로그램을 재시작 하면 또 잘 올라가고 일정 시간(횟수)가 지나면 다시 재발합니다.
======= 에러 메세지 ==================
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;
}
connection = new SqlConnection(connectString)
·Î ¸¸µç °´Ã¼°¡ °¡ºñÁö Ä÷ºÅÍ¿¡ÀÇÇؼ ÇØÁ¦°¡ ¾ÈµÇ´Â °ÍÀϼöµµ À־ÀÔ´Ï´Ù.
finally
{
connection.Close();
connection = null; <- ÀÌ°Å Ãß°¡Çؼ ¸í½ÃÀûÀ¸·Î ÂüÁ¶ ÇØÁ¦ ó¸®ÇØÁÖ´Â°Ç ¾î¶³±î¿ä?
}
µÇ¸é ÁÁ°í ¾ÈµÇ¸é ¸»ÁÒ ¤Ð¤Ð
ÀÌ¿Ü¿¡µµ ¾îµò°¡new·Î ¸¸µç°ÍÀÌ °¡ºñÁöÄ÷ºÅÍ¿¡ ÀÇÇØ ÇØÁ¦µÇÁö ¾Ê´Â °ÍÀÌ ÀÖ´ÂÁö
ÇѶ¡ÇѶ¡ »ìÆ캸´Â¼ö¹Û¿¡ ¾ø°Ú³×¿ä...
SqlTransaction sqlTran;
SqlCommand command;
¶ó´ø°¡..
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;
}
ÀÌ ¼öÁ¤µÈ ÄÚµå´Â ¸®¼Ò½º ´©¼ö¸¦ ¹æÁöÇÏ°í Æ®·£Àè¼Ç 󸮸¦ °³¼±Çϸç, Äõ¸® ½ÇÇà °á°ú¸¦ ÀûÀýÇÏ°Ô Ã³¸®ÇÕ´Ï´Ù
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;
}
using (SqlTransaction sqlTran = bReadUncommitted ? connection.BeginTransaction(
ÀÌ ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê´Â (ÀÌÈÄ¿¡ using À¸·Î connection »ý¼º) ¹®Á¦°¡ Àֳ׿ä ^^