SqlHelper Class

.Net 2009. 11. 27. 10:22 posted by 무명시인

시작하기


Microsoft Application Blocks for .NET

http://msdn.microsoft.com/ko-kr/library/ms954827.aspx

이런 것이 언젠가..

ms 에서 공개한적이 있습니다..

데이타 베이스 코드를 재사용이 가능하게 클래스화 하고..

랩핑(wrapping)하고 머 등등 이런 예기를 했지요..

그래서..!!

오늘은 다짜고짜 SqlHelper 를 만들어 보겠습니다..

왜 뜬금없는 SqlHelper 냐!!

아무 이유 없습니다.. 그냥 입니다 ^^;;

상용 Framework 들을 살펴 보면..

가장중요시 생각되는 기능이 DataBase 핸들링 코드와 Transaction 입니다..

머 귀찬에 이런걸 따로 만드냐..

Ado.Net 구문을 그냥 Copy & Paste 해서 사용하면 되지 않는냐..

하고 생각 하시는 분들은 ..흠흠 할말이 없습니다..

이런 식으로 하는 이유는..

비밀입니다.. 절대 몰라서 말하지 않는것은 아닙니다..^^;;

http://www.theonetech.co.kr/TheOne/sub0502.aspx

사용자 삽입 이미지


우리나라에서 가장널리 사용되는 .net 진영의 Framework 는

드원의 neodeex 가 아닌가 합니다..사용해보니 좋더군요..

그래서 이를 참조해서 씸플하게 만들어 보았습니다..

구성은 데이타를 핸들링하는 SqlHelper 클래스와 파라미터를 랩핑(Wrapping)하는 파라미터컬렉션(SqlPrmCollection)클래스로 나누어집니다..

먼저 SqlHelper 클래를 보시면..

IDisposable 인터페이스를 상속 받는 구조로 되어있습니다..

이 인터페이스에 대한 설명은 다음 링크의 강좌를 살펴보시구요..

필자는 그리 친절하지가 않아서요..(죄송합니다)

1. 시작하기

크게..데이타 연동을 할때 필요한..

SqlConnection, SqlCommand, SqlDataAdapter, DataSet 등의 대체를 멤버변수로 사용하구요..

동작 메소드로는

쿼리를 실행하고 DataSet 를 반환하는 ExecuteDataSet

쿼리를 실행하고 반영된 Row수를 반환하는 ExecuteNonQuery

쿼리를 실행하고 단일값(object)을 반환하는 ExecuteScalar

로 구성되어 집니다..

그리고 IDisposable 인터페이스를 상속받아

인터페이스멤버인 Dispose 메소드를 작성합니다..



2. 필드 멤버

/// 
/// member connection string
/// 	
public string connectionstring { get; set; }

/// 
/// member SqlConnection
/// 
private SqlConnection con;

/// 
/// member SqlCommand
/// 
private SqlCommand cmd;

/// 
/// member SqlDataAdapter
/// 
private SqlDataAdapter da;

/// 
/// member DataSet
/// 
private DataSet ds;


먼저 멤버 변수들을 지정합니다.. ado.net 에서 사용될 클래스의 인스턴스들과 DataSet, connectionstring 들이 보입니다..


3. 생성자

public SqlHelper()
{
	this.connectionstring = "server=localhost;database=test;uid=sa;pwd=1234;";
}

public SqlHelper(string connectionString)
{
	this.connectionstring = connectionString;
} 


생성자 입니다..

생성자를 두개로 나눈이유는..

connectionstrig 을 지정해야할 필요가 있다면 지정을하고..

아니라면 고정값으로 사용하고..

머 등등의 이유에서 이지요..



4. IDisposable.Dispose()

public void Dispose()
{
	if (con != null) con.Dispose();
	if (cmd != null) cmd.Dispose();
	if (da != null) da.Dispose();
	if (ds != null) ds.Dispose();
}



그리고 IDisposable 인터 페이스를 상속받에 구현해야할 dispose 메소드를 구현합니다..

이미 생성된 개체들을 해제(dispose) 해주는 코드들이 들어 갑니다..

5. Execute 메소드들

/// 
/// 셀렉트의 결과 집합을 반환한다.
/// 
/// 
/// 
/// 
/// DataSet
public DataSet ExecuteDataSet(string query, SqlPrmCollection param, CommandType cmdType)
{
	using (con = new SqlConnection(connectionstring))
	{
		cmd = new SqlCommand(query, con);
		cmd.CommandType = cmdType;

		da = new SqlDataAdapter(cmd);
		ds = new DataSet();

		if (param != null && param.Count > 0)
		{
			IEnumerator ie = param.GetEnumerator();
			while (ie.MoveNext()) cmd.Parameters.Add((SqlParameter)ie.Current);
		}

		con.Open();
		da.Fill(ds);
	}

	return ds;
}


쿼리를 실행하고 DataSet 를 반환하는 메소드 입니다..

익숙한 코드들이 보입니다..

그렇습니다.. msdn 에서 제공하는 기본적인 DataSet 반환 구문입니다..

여기서 추가적인 설명이 필요한 부분은 DataSet 개체를 만들고..

파라미터를 해체(?) 하는 코드 부분인거 같은데요..

다음 아티클에서 설명 할 SqlPrmCollection 컬렉션에 담긴 파라미터를 추출해서..

SqlCommand 의 파라미터에 더하기(Add) 하는 코드 입니다.



/// 
/// 쿼리문 혹은 SP 실행후 반영된 row 수 반환
/// 
/// 
/// 
/// 
/// int
public int ExecuteNonQuery(string query, SqlPrmCollection param, CommandType cmdType)
{
	int iRe = 0;

	using (con = new SqlConnection(connectionstring))
	{
		cmd = new SqlCommand(query, con);
		cmd.CommandType = cmdType;

		if (param != null && param.Count > 0)
		{
			IEnumerator ie = param.GetEnumerator();
			while (ie.MoveNext()) cmd.Parameters.Add((SqlParameter)ie.Current);
		}

		con.Open();
		iRe = cmd.ExecuteNonQuery();
	}

	return iRe;
}


쿼리를 실행하고 반영된 Row수를 반환하는 메소드 입니다..

역시 msdn 코드와 다를것이 없습니다..

Insert 쿼리와 Update 쿼리에서 사용하시는 메소드 입니다..



/// 
/// 쿼리문 혹은 SP 실행후 단일값 반환
/// 
/// 
/// 
/// 
/// object
public object ExecuteScalar(string query, SqlPrmCollection param, CommandType cmdType)
{
	object objRe;

	using (con = new SqlConnection(connectionstring))
	{
		cmd = new SqlCommand(query, con);
		cmd.CommandType = cmdType;

		if (param != null && param.Count > 0)
		{
			IEnumerator ie = param.GetEnumerator();
			while (ie.MoveNext()) cmd.Parameters.Add((SqlParameter)ie.Current);
		}

		con.Open();
		objRe = cmd.ExecuteScalar();
	}

	return objRe;
}


쿼리를 실행하고 단일값을 반환하는 메소드 입니다..

그렇습니다..msdn 코드 입니다..



6. 끝으로

너무 간단해서 이게 동잡하는거 맞냐??

하시는 분이 있을 수도 있겠습니다만..

동작합니다..

복잡한것을 싫어하는 본인이 직접짠코드지만..

가끔 저도 제가 짠 코드를 못믿습니다만..

동작합니다..

그럼 다음편에

파라미터를 입력할때 사용할

SqlPrmCollection 클래스를 살펴 보겠습니다