HOWTO · Csharp

C#에서 데이터베이스 쿼리 선택

C#에서 SELECT 쿼리를 사용하여 데이터베이스 연결을 설정하고 레코드를 검색하는 방법에 대한 완전한 프로그래밍 자습서입니다.

이 기사에서는 C# 애플리케이션과 데이터베이스 연결을 설정하고 데이터베이스에서 SELECT 쿼리를 사용하여 다른 테이블에서 데이터를 가져오는 방법을 안내합니다.

데이터베이스란 무엇인가

데이터베이스는 단순히 표 형식으로 구성된 데이터 모음이 아니라 그 이상입니다. 적절한 명명 규칙 및 다른 테이블과의 관계를 사용하여 조직화된 구조의 데이터를 나타냅니다.

데이터베이스 관리 시스템은 또한 데이터베이스와 상호작용하기 위한 언어(예: SQL)를 제공하는데, 이는 영어와 매우 유사하여 사용자가 매우 쉽게 이해할 수 있습니다. 또한 데이터 보안 및 최적화 계획을 제공하여 데이터 작업의 성능을 향상시킵니다.

C#의 데이터베이스 연결

일반적으로 프로그래머는 데이터베이스를 사용하여 응용 프로그램의 데이터를 저장합니다. C# 언어는 Oracle 데이터베이스 및 Microsoft SQL 서버 데이터베이스로 데이터베이스 프로그래밍을 제공합니다.

C#은 다른 많은 데이터베이스와도 작동할 수 있지만 위의 두 데이터베이스가 가장 일반적이고 널리 사용됩니다. 데이터베이스가 무엇이든 모든 데이터베이스의 논리는 매우 동일합니다.

이 문서에서는 SQL Server 데이터베이스를 사용하여 작업을 수행합니다. 데이터베이스 작업에 필요한 네임스페이스System.data.SqlClient입니다.

여기에는 데이터베이스 연결 및 작업 중에 필요한 모든 클래스가 포함됩니다.

SQL Server에서 데이터베이스 생성

첫 번째 단계는 SQL Server 내에서 상호 작용해야 하는 데이터베이스를 만드는 것입니다. 이 데이터베이스는 다음 쿼리를 사용하여 생성됩니다.

create database mydb;

use mydb;

CREATE TABLE Student(
    studentID varchar(20) NOT NULL PRIMARY KEY,
    stuentName varchar(60) NOT NULL
);

insert into Student values("BS01", 'David');
insert into Student values("BS02", 'John');

이러한 쿼리를 실행한 후 Student 테이블이 있는 데이터베이스가 생성되고 여기에는 2개의 행이 있습니다.

C#의 데이터베이스와 연결

데이터베이스와 상호 작용하려면 몇 가지 매개 변수가 필요합니다. 이러한 매개변수는 결합되어 연결 문자열을 형성합니다.

  1. 데이터베이스 이름 - 데이터를 읽어야 하는 데이터베이스의 이름을 제공해야 합니다. 한 번에 하나의 데이터베이스만 사용하는 것이 좋습니다.
  2. 데이터베이스 자격 증명 - 데이터베이스와 상호 작용하기 위한 사용자 이름과 암호가 항상 있으므로 승인된 사용자 이름과 암호를 제공해야 합니다.
  3. 일부 선택적 매개변수 - 일부 선택적 매개변수를 제공할 수도 있습니다. 예를 들어, 데이터베이스가 일정 기간 동안 비활성화 상태를 유지하는 경우 연결을 닫아야 하는 타임아웃 값을 설정할 수 있습니다.

데이터베이스와의 연결을 수행할 예제 코드를 살펴보겠습니다. 데이터베이스 사용자 이름이 usr이고 암호가 usr123이라고 가정합니다.

SqlConnection conn;
string connectString =
    @"Data Source=DESKTOP-FQ8R559;Initial Catalog=mydb;User ID=usr;Password=usr123";

conn = new SqlConnection(connectString);
conn.Open();
Console.WriteLine("Connection Established");

데이터베이스에서 데이터 읽기

데이터베이스에서 데이터를 읽으려면 SqlCommand 클래스와 SqlDataReader가 필요합니다. SqlCommand 클래스는 데이터베이스에서 명령을 실행하는 데 사용됩니다.

Select 명령을 실행하면 Resultset이 생성됩니다. 이 ResultsetSqlDataReader 클래스를 사용하여 읽을 수 있습니다.

아래 코드를 살펴보자.

SqlCommand cmd;
SqlDataReader dataReader;
string sql = "Select * from Student";
cmd = new SqlCommand(sql, conn);
dataReader = cmd.ExecuteReader();
Console.WriteLine("Data from the Database..");
while (dataReader.Read()) {
  Console.WriteLine(dataReader.GetValue(0) + " || " + dataReader.GetValue(1));
}
dataReader.close();
conn.close();

이 코드 조각에서 먼저 SqlCommand 개체를 만들고 데이터베이스에서 실행하는 데 필요한 쿼리를 만들었습니다. 그런 다음 이 쿼리는 cmd 개체와 연결 개체 conn으로 전송됩니다.

쿼리를 실행하려면 쿼리에서 얻은 데이터가 포함된 Resultset을 반환하는 ExecuteReader() 함수를 사용합니다. 이 ResultSet은 루프의 데이터를 행 단위로 읽는 SqlDataReader 개체를 사용하여 읽을 수 있습니다.

결국 우리는 판독기와 연결 개체를 닫아야 나중에 사용할 수 있도록 해제할 수 있습니다.

위 코드의 출력은 다음과 같습니다.

Connection Established.
Data from the Database..
BS01 || David
BS02 || John

Select 쿼리를 실행하기 위해 ExecuteReader() 함수를 사용했습니다. 더 많은 유형의 쿼리를 실행하려면 다른 방법이 필요합니다.

인기 있는 쿼리 결과 리더는 다음과 같습니다.

기능 이름 설명
ExecuteReader() 데이터를 테이블 형식으로 반환할 수 있는 쿼리를 실행하는 데 사용되는 함수입니다.
ExecuteNonQuery() insert, update 등과 같은 데이터베이스에서 DML 쿼리를 실행하는 기능
ExeuteScalar() count와 같은 단일 값을 반환하는 쿼리용 함수