2020. 12. 24. 00:06ㆍ언어/C#. JAVA
1. DB Connection
DB ConnectionString 작성할 때, SqlConnectionStringBuilder 클래스를 사용하면 연결문자열의 내용을
손쉽게 만들 수 있다. (가독성 ⬆)
🔸 일반적인 방식
- Data Source, InitialCatalog, UserID, Password 등을 변수로 넘겨줘서 문자열을 붙여주거나 하드코딩
string ConnectionString = @"Data Source=14.43.254.50;Initial Catalog=RUBY_DEV;User id=sa;Password=1234;"
🔸 SqlConnectionStringBuilder 사용
- ConnectionString 프로퍼티 또는 ToString() 메서드를 사용하면 문자열을 연결해 ConnectionString을 만들어준다.
- key,value 쌍에 대한 유효성을 검사하기 때문에 잘못된 문자열을 만들 수 없고, 잘못된 문자열을 포함한 경우 throws Exception 처리한다.
SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
connBuilder.Add("Data Source", "14.43.254.50");
connBuilder.Add("Initial Catalog", "RUBY_DEV");
connBuilder.Add("User Id", "sa");
connBuilder.Add("Password", "1234");
this.ConnectionString = connBuilder.ConnectionString; // 또는 connBuilder.ToString();
2. SqlParameter 파라미터 처리
🔸 SqlParameter가 여러 개면 어떻게 처리하는게 효율적일까
1) Parameters를 배열로 처리
➡Parameter가 늘어날 때마다 new SqlParameter("param_name", "param_val") 추가
DataTable resultTable = this.helper.FillTable
(@"SELECT * FROM TB_USERS WHERE USE_YN = @V_USE_YN"
, CommandType.Text
, new SqlParameter[] { new SqlParameter("V_USE_YN", "Y") });
2) Collection처럼 만들어서 처리
➡Parameter가 늘어나면 parameters.AddParameter("param_name", "param_val"); 추가
코드작성 시 깔끔하고 사용하기 편하다.
SqlParameterList parameters = new SqlParameterList();
parameters.AddParameter("V_USE_YN", "Y");
DataTable resultTable = this.helper.FillTable
(@"SELECT * FROM TB_USERS WHERE USE_YN = @V_USE_YN"
, CommandType.Text
, parameters);
this.dataGridView1.DataSource = resultTable;
추가로 SqlParameterList 클래스는 IEnumerable<SqlParameter> 인터페이스를 상속받아야 하는데
그 이유는 foreach문을 활용하기 위해서다. (상속 안받으면 foreach구문 사용 안됨.)
자세한 내용⬇⬇⬇
임의의 클래스가 IEnumerable을 상속받게 되면 IEnumerable가 클래스의 내부데이터에 대한 순방향의 접근성을 가질 수 있게 된다.
foreach문은 반복문으로 처음부터 해당 객체의 끝까지 순회하는 구문이다.
멤버들을 순서대로 순회가능하며 배열이나 컬렉션처럼 정보의 집합을 관리하는 클래스에 순회기능을 제공한다
public class SqlParameterList : IEnumerable<SqlParameter>
{
// 생략
}
public DataTable FillTable(string commandText, CommandType commandType, SqlParameterList parameters)
{
// 생략
// add parameters
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
}
3. SqlConnection & SqlCommand 클래스 사용
SqlConnection 클래스와 SqlCommand 클래스를 다음과 같이 사용 할 수 있다.
private SqlConnection CreateConnection()
{
return new SqlConnection(this.ConnectionString);
}
private SqlCommand CreateCommand()
{
return new SqlCommand();
}
// 호출해서 사용
SqlConnection connection = this.CreateConnection();
SqlCommand command = this.CreateCommand();
//SqlConnection connection = new SqlConnection(this.ConnectionString)
//SqlCommand command = new SqlCommand();
생성자 호출을 메서드로 빼서 사용하면
여러 데이터베이스의 DBHelper 클래스를 만들게 될 때 수정할 코드가 줄어든다. (copy & paste 쉬워짐)
예) OracleDBHelper 클래스를 추가하게 되었다.
CreateConnection()의 SqlConnection ➡ OracleConnection
CreateCommand() 의 SqlCommand ➡ OracleCommand
return타입, return값만 변경해주면 된다.
반면에 메서드로 빼지 않았다면
일일이 SqlConnection, SqlCommand가 사용된 곳을 모두 수정해줘야하는 번거로움이 발생한다.
'언어 > C#. JAVA' 카테고리의 다른 글
[.NET] IExtenderProvider Interface (feat.ToolTip) (0) | 2021.04.05 |
---|---|
[JAVA] StringTokenizer 사용법 (0) | 2021.01.05 |
[C#] txt 파일에 로그 기록하기 (StreamWriter 메서드) (0) | 2020.12.18 |
[C#] 크리티컬 섹션, 뮤텍스, 세마포어 (0) | 2020.06.04 |
[C#] WinAPI(Kernel32 dll) 사용하기 (0) | 2019.08.12 |