반응형
이전 포스팅과 내용이 연결되어 있으며, 이미 설명한 객체, 메서드 내용에 대해서는 다시 다루지 않습니다.
2023.03.27 - [Programming/C#] - C# - 데이터베이스 연동하기 - DB 연결하기(SqlConnection) (1/2)
DB 데이터 불러오기 예시 구문
SELECT 코드
// read dialog history
public void readData()
{
// connectionString : include DB connection information
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
// DB server Enter
connection.Open();
// Query Text
string queryString = "SELECT * FROM dbo.t_dialog_history";
// SqlCommand(cmd) instance initialize
SqlCommand cmd = new SqlCommand(queryString, connection);
// Execute
SqlDataReader reader = cmd.ExecuteReader();
// Read Data
while (reader.Read())
{
MessageBox.Show($"{reader[0]}, {reader[1]}, {reader[2]}, {reader[3]}, {reader[4]}, {reader[5]}");
}
// DB server connection exit
connection.Close();
}
catch (Exception ex) // server connection failed
{
MessageBox.Show("Error inserting data: " + ex.Message);
connection.Close();
}
}
}
SqlCommand
SQL Server 데이터베이스에 대해 실행할 Transact-SQL 문이나 저장 프로시저를 나타내는 클래스
SqlCommand(String, SqlConnection)
- 새 인스턴스를 초기화하는 생성자
- 쿼리의 텍스트와 SqlConnection을 사용하여 SqlCommand 클래스의 새 인스턴스 초기화하는 메서드
- String : 쿼리 텍스트
- SqlConnection : SQL Server의 인스턴스에 대한 연결
SqlCommand.ExecuteReader()
- Command의 String(queryString)를 Connection에 보내고 SqlDataReader를 빌드하는 메서드
- 즉, 작성한 쿼리를 SQL Server 데이터베이스로 보내고 실행하는 메서드
SqlDataReader
- SQL Server 데이터베이스에서 행의 앞으로만 이동 가능한 스트림을 읽을 수 있게 하는 클래스
SqlDataReader.Read()
- SqlDataReader를 다음 레코드로 이동하는 메서드
- 행이 더 있으면 true 반환
- 행이 존재하지 않으면 false 반환
실행
- MS-SQL의 DB 조회 결과
-- MS-SQL Results
select * from t_dialog_history
- C#에서의 DB 조회 결과
- 코드는 위에 명시되어 있으므로 생략하고 호출만!
// select data result in C#
MessageBox.Show($"{reader[0]}, {reader[1]}, {reader[2]}, {reader[3]}, {reader[4]}, {reader[5]}");
DB 데이터 입력하기 구문
INSERT 코드
// insert dialog history
public void inputData()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
string queryString = "INSERT INTO dbo.t_dialog_history" +
"(f_dialog_user, f_dialog_question, f_dialog_answer, f_dialog_ip_address, f_dialog_date)" +
"VALUES (@user, @question, @answer, @ip, @date)";
SqlCommand cmd = new SqlCommand(queryString, connection);
cmd.Parameters.AddWithValue("@user", "tester");
cmd.Parameters.AddWithValue("@question", "q2");
cmd.Parameters.AddWithValue("@answer", "a2");
cmd.Parameters.AddWithValue("@ip", "192.168.~");
cmd.Parameters.AddWithValue("@date", DateTime.Now.ToString("yyyy-MM-d HH:m:ss:fff"));
int rowsAffected = cmd.ExecuteNonQuery();
MessageBox.Show("Rows affected: " + rowsAffected);
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error inserting data: " + ex.Message);
connection.Close();
}
}
}
SqlCommand
SqlCommand.Parameters 속성
- SqlParameterCollenction 호출
SqlParameterCollection.AddWithValue(String, Object) 메서드
- SqlParameterCollection 끝에 값 추가
- String : 추가할 매개 변수의 이름
- Object : 추가할 값
- 즉, SqlParameter에 값 추가하는 메서드
- Add 메서드는 Legacy(Deprecated) 상태이며 AddWithValue 사용을 권장함
SqlCommand.ExecuteNonQuery 메서드
- 연결에 대한 Transact-SQL 문을 실행하고 영향을 받는 행의 수를 반환하는 메서드
실행
- C#에서의 Insert Query 실행
// SQL Server Insert Query Execute function
inputData();
- MS-SQL의 DB 조회 결과
-- MS-SQL Results
select * from t_dialog_history
참고
Microsoft - .NET - SqlCommand 클래스
Microsoft - .NET - SqlCommand 생성자
Microsoft - .NET - SqlCommand.ExecuteReader 메서드
Microsoft - .NET - SqlDataReader 클래스
Microsoft - .NET - SqlDataReader.Read 메서드
Microsoft - .NET - SqlCommand.Parameters 속성
Microsoft - .NET - SqlParameterCollection.AddWithValue(String, Object) 메서드
Microsoft - .NET - SqlCommand.ExecuteNonQuery 메서드
반응형