쪽팔리면 질문하지 맙시다. 소중한 답변 댓글을 삭제하는건 부끄러운 일 입니다
아래와 같이 에러 메시지가 나오면서 서버로 데이터가 올라가지 않습니다.
처음에는 잘 올라가다가 나중에 저러고 있는데
쿼리를 날리는 프로그램을 재시작 하면 또 잘 올라가고 일정 시간(횟수)가 지나면 다시 재발합니다.
======= 에러 메세지 ==================
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() ȣDZ ʽϴ.
̷ ҽ ֽϴ.
ذ : 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 ) ֳ ^^