C# - MSSQL - Query 다루기(SqlCommand) (2/2)

반응형

 

이전 포스팅과 내용이 연결되어 있으며, 이미 설명한 객체, 메서드 내용에 대해서는 다시 다루지 않습니다.

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 메서드

 

반응형