하나. 머리말:
저장 프로시저(Stored Procedure)는 특정 기능을 완료하도록 설계된 SQL 문 집합으로, 컴파일되어 데이터베이스에 저장됩니다. 사용자는 이름을 지정하고 매개변수(저장 프로시저에 매개변수가 있는 경우)를 제공하여 저장 프로시저를 실행합니다. 저장 프로시저는 데이터베이스의 중요한 개체이므로 잘 설계된 데이터베이스 응용 프로그램에서는 저장 프로시저를 사용해야 합니다. 일반적으로 저장 프로시저에는 다음과 같은 장점이 있습니다.
◆ 표준 구성 요소 프로그래밍이 가능합니다
. ◆ 더 빠른 실행 속도를 얻을 수 있습니다.
◆ 저장 프로시저는 네트워크 트래픽을 줄일 수 있습니다.
◆ 저장 프로시저는 보안 메커니즘으로 충분히 활용될 수 있습니다
. .NET 데이터베이스 응용 프로그램의 저장 프로시저 응용 프로그램과 이를 ADO.NET의 SqlDataAdapter 개체, DataSet 개체 등과 함께 사용하여 .NET 데이터베이스 응용 프로그램의 전반적인 성능을 향상시키는 방법을 소개합니다.
둘. 시스템 요구 사항:
개발 도구: Visual Studio.NET
데이터베이스 관리 시스템: SQL Server 2000(샘플 프로그램에 사용된 Pubs 데이터베이스 포함)
3. 간단한 저장 프로시저 만들기:
여기서는 Visual Studio.NET IDE를 사용하여 저장 프로시저를 만드는 방법을 소개하겠습니다. Visual Studio.NET IDE를 사용하여 저장 프로시저를 만드는 것은 매우 쉽고 직관적입니다. 서버 탐색기에서 Pubs 데이터베이스로 이동하여 노드를 확장하면 그림 1과 같이 저장 프로시저를 포함한 다양한 데이터베이스 개체를 찾을 수 있습니다. 보여주다.
저장 프로시저 노드를 마우스 오른쪽 버튼으로 클릭하면 "새 저장 프로시저" 명령이 포함된 메뉴가 나타납니다. 새 저장 프로시저를 생성하면 아래에 표시된 코드 템플릿이 IDE의 코드 편집 창에 나타납니다.
프로시저 dbo.StoredProcedure1 만들기
/*
(
@parameter1 데이터 유형 = 기본값,
@parameter2 데이터 유형 OUTPUT )
*/
처럼
/* NOCOUNT를 ON으로 설정 */
반품
위의 코드 템플릿은 저장 프로시저를 생성하기 위한 단순화된 구문 규칙을 따릅니다.
CREATE PROC [ EDURE ] 프로시저_이름 [ ;
[ { @parameter 데이터_유형 }
[ 가변 ] [ = 기본값 ] [ 출력 ]
] [ ,...N ]
[ 와 함께
{ 재컴파일 | 재컴파일, 암호화 } ]
[ 복제용 ]
AS sql_statement [ ...n ]
공간 제한으로 인해 여기에서는 각 매개변수의 의미를 소개하지 않습니다. 관심 있는 독자는 SQL Server 2000 데이터베이스 관리 시스템에 대한 정보를 참조하시기 바랍니다.
아래에서는 이 코드 템플릿의 각 문법 구성 요소를 간략하게 소개하겠습니다. CREATE PROCEDURE 문은 저장 프로시저를 생성하고 그 뒤에 저장 프로시저의 이름을 지정합니다. "/*...*/"의 구성 요소는 입력 매개 변수와 출력 매개 변수를 포함할 수 있는 저장 프로시저의 매개 변수입니다. AS 키워드 뒤에 오는 내용은 저장 프로시저에 포함된 SQL 문 수와 유형에 상관없이 저장 프로시저의 본문입니다. RETURN 키워드는 저장 프로시저의 끝을 나타내며 호출자에게 정수 상태 값을 반환할 수 있습니다. 매개 변수 없이 간단한 저장 프로시저를 만들어 사용해 보겠습니다.
CREATE PROCEDURE dbo.up_GetPublisherInfo
처럼
SELECT pub_id, pub_name, 도시, 주, 국가
출판사에서
반품
위의 저장 프로시저를 생성한 후 저장합니다. 저장되면 저장 프로시저에 해당하는 노드가 서버 탐색기에 나타납니다. 또한 코드 편집 창의 CREATE 키워드가 기존 저장 프로시저를 변경하는 데 사용되는 ALTER 키워드로 변경되었습니다. 위의 저장 프로시저를 실행하려면 해당 노드를 클릭하고 마우스 오른쪽 버튼 클릭 팝업 메뉴에서 "저장 프로시저 실행"을 선택하면 됩니다. 작업 결과는 다음과 같습니다.
4. 매개변수를 사용하여 저장 프로시저 만들기:
위에서는 매개변수 없이 간단한 저장 프로시저를 만들었지만 실제 응용 프로그램에서는 매개변수가 있는 저장 프로시저를 많이 사용하는 경우가 많습니다. 매개변수가 있는 저장 프로시저는 일반적으로 데이터를 업데이트하거나 데이터를 삽입하는 데 사용됩니다. 아래에서는 동일한 작업 방법을 사용하여 매개변수가 있는 저장 프로시저를 생성할 수 있습니다.
절차 생성 dbo.up_UpdatePublisherInfo
(
@pub_id 문자(4),
@pub_name varchar (40),
@cityvarchar(20),
@상태 문자(2),
@국가 varchar (30)
)
처럼
업데이트 출판사
SET pub_name = @pub_name, 도시 = @city, 주 = @state,
국가 = @국가
어디서( pub_id = @pub_id )
반품
위의 저장 프로시저 생성 코드에서는 이름 앞에 "@" 기호를 추가하여 저장 프로시저의 지역 변수 매개변수를 선언하고, 각 매개변수의 유형을 선언하고, 각 매개변수의 방향 값을 결정합니다. is, 매개변수가 입력 유형인지, 출력 유형인지, 입출력 유형인지, 반환 값 유형인지를 나타냅니다. 사용자는 해당 저장 프로시저 이름과 정확하고 유효한 매개변수를 통해 저장 프로시저를 호출할 수 있습니다. 또한 OUTPUT 키워드를 사용하여 매개변수에 출력 매개변수를 추가할 수 있습니다. 구체적인 방법은 위의 구문 규칙을 참조하세요. 출력 매개변수는 호출자에게 관련 정보를 반환할 수 있습니다.
위의 저장 프로시저는 게시자 테이블에서 해당 게시자 정보를 업데이트할 수 있습니다. 저장 프로시저의 노드를 클릭하고 마우스 오른쪽 버튼 클릭 팝업 메뉴에서 "저장 프로시저 실행"을 선택하여 실행할 수 있습니다. 실행되면 게시자 정보를 입력하기 위한 대화 상자가 IDE에 나타납니다(그림 3 참조). 이 대화 상자에 정확하고 유효한 업데이트 정보를 입력한 후 pub_id 값이 원본 테이블에 있어야 하며 "확인" 버튼을 클릭하여 데이터를 업데이트하세요.
다섯. 간단한 저장 프로시저를 사용하여 데이터베이스 응용 프로그램 만들기:
다음으로 매개 변수 없이 위의 저장 프로시저를 사용하여 ADO.NET에서 SqlDataAdapter 개체와 DataSet 개체도 사용하는 데이터베이스 응용 프로그램을 만듭니다. SqlDataAdapter 개체는 SQL Server 데이터베이스와 DataSet 개체 사이를 연결하는 브리지 역할을 합니다. SqlDataAdapter 개체에는 일반적으로 사용되는 두 가지 메서드인 Fill() 메서드와 Update() 메서드가 포함되어 있습니다. Fill() 메서드는 데이터베이스에서 해당 데이터를 가져와 DataSet 개체에 채울 수 있으며, 이름에서 알 수 있듯이 Update() 메서드는 데이터 세트를 업데이트합니다. Fill() 메서드를 호출하기 전에 실제로 SqlCommand 개체인 SqlDataAdapter 개체의 SelectCommand 속성을 설정해야 합니다. SelectCommand 속성에는 유효한 SQL 문이 포함되어 있으며 데이터베이스에서 해당 데이터를 가져와 DataSet 개체에 채울 수 있습니다.
먼저 Windows Forms 애플리케이션을 만듭니다. 프로그래밍 언어는 C#입니다. Visual Studio.NET에서 새 프로젝트를 만든 후 백엔드 데이터베이스에 연결하고 데이터 세트 개체를 가져오는 비즈니스 논리를 캡슐화하는 게시자 클래스라는 새 클래스를 프로젝트에 추가합니다.
1.
단계는 다음과 같습니다
.필요한 네임스페이스 참조를 추가합니다. System.Data.SqlClient를 사용합니다.
2. 이 클래스에 다음과 같은 필수 변수를 추가합니다.
private SqlConnection cnPubs;
개인 SqlCommand cmdPubs;
개인 SqlDataAdapter daPubs;
개인 데이터 세트 dsPubs;
3. 이 클래스의 생성자에서 백엔드 데이터베이스에 대한 연결을 완료하고 SqlDataAdapter 개체 및 기타 비즈니스 논리(
public Publishers())
를 가져옵니다.
{
노력하다
{
//데이터베이스 연결 객체 생성
cnPubs = new SqlConnection( "서버=localhost;통합 보안=true;데이터베이스=pubs" );
//SqlCommand 개체를 만들고 해당 명령 유형을 저장 프로시저로 지정합니다.
cmdPubs = 새로운 SqlCommand();
cmdPubs.Connection = cnPubs;
cmdPubs.CommandType = CommandType.StoredProcedure;
cmdPubs.CommandText = "up_GetPublisherInfo";
//SqlDataAdapter 개체를 만들고 해당 SelectCommand 속성을 위의 SqlCommand 개체로 설정합니다.
daPubs = 새로운 SqlDataAdapter();
daPubs.SelectCommand = cmdPubs;
//DataSet 객체 생성
dsPubs = 새로운 DataSet();
}
잡기(예외) {}
}
4. 마지막으로 이 클래스에는 DataSet 개체를 SqlDataAdapter 개체로 채우고 채워진 DataSet 개체를 반환하는 GetPublisherInfo() 메서드가 제공됩니다. 이 메서드는 다음과 같습니다. SqlDataAdapter 개체가 암시적으로 데이터베이스 연결을 열고 데이터를 얻은 후 암시적으로 데이터베이스 연결을 엽니다. 즉, DataSet 개체가 비연결 모드에서 작동하고 명시적으로 데이터베이스 연결을 열고 데이터를 얻을 때 SqlDataAdapter 개체가 연결을 닫지 않음을 의미합니다.
공개 데이터세트 GetPublisherInfo().
{
// SqlDataAdapter 개체의 Fill() 메서드를 호출하고 데이터 세트 개체를 반환합니다.
daPubs.Fill(dsPubs);
dsPub를 반환합니다.
}
Publishers 클래스 디자인을 완료한 후 기본 폼에 DataGrid 컨트롤을 추가하고 이를 사용하여 DataSet 개체에 데이터를 표시합니다. 먼저 기본 양식 클래스에 다음 멤버 변수를 추가합니다.
private Publishers pubs;
개인 데이터세트 ds;
그런 다음 기본 양식 클래스의 생성자를 다음과 같이 수정합니다.
공개 Form1()
{
//
// Windows Forms 디자이너 지원에 필요합니다.
//
초기화구성요소();
//
// TODO: InitializeComponent 호출 뒤에 생성자 코드를 추가합니다.
// pubs = 새로운 게시자();
ds = pubs.GetPublisherInfo();
dataGrid1.DataSource = ds.Tables[0];
}
이러한 방식으로 애플리케이션이 시작되자마자 매개 변수 없이 위의 저장 프로시저를 사용하여 Pubs 데이터베이스에서 얻은 해당 데이터가 기본 폼의 DataGrid 컨트롤에 표시됩니다. 프로그램 실행 다이어그램은 다음과 같습니다
. 매개변수가 있는 저장 프로시저가 있는 데이터베이스 애플리케이션 만들기:
위에서는 매개변수가 없는 저장 프로시저가 있는 애플리케이션을 만들었고 이제 더 복잡한 데이터베이스 애플리케이션을 만들겠습니다. 실제 데이터베이스 응용 프로그램에서는 데이터를 가져오고 데이터를 업데이트, 삽입 또는 삭제해야 하는 경우가 많습니다. 동시에 SqlDataAdapter 개체를 사용할 때는 Update()를 호출해야 합니다. 방법. Update() 메서드는 DataSet 개체의 DataTable 개체에 있는 각 레코드의 변경 사항을 기반으로 해당 작업을 자동으로 완료합니다. SqlDataAdapter 개체에는 UpdateCommand, InsertCommand, DeleteCommand 등과 같은 속성도 포함되어 있습니다. 이러한 속성은 실제로 SqlCommand 개체입니다. Update() 메서드는 작업 유형에 따라 적절한 속성을 선택합니다.
데이터베이스 애플리케이션을 구축하기 위해 매개 변수가 있는 저장 프로시저를 사용할 때 일반적으로 Sql 매개 변수와 관련된 다양한 속성과 메서드를 캡슐화하는 SqlParameter 클래스를 사용합니다. 속성에는 ParameterName, SqlDBType, Direction, Size, Value, SourceColumn 및 SourceVersion 등이 포함됩니다. 그 중 ParameterName, SqlDBType, Direction, Size 및 기타 속성은 저장 프로시저에 정의된 매개 변수와 일치하는 데 사용됩니다. 예를 들어, 아래에 정의된 SqlParameter 개체는 이전에 정의된 up_UpdatePublisherInfo 저장 프로시저의 "@pub_id " 매개 변수를 일치시키는 데 사용됩니다.
SqlParameter updParam = new SqlParameter( "@pub_id", SqlDbType.Char, 4 );
위 정의에서는 Direction 특성이 명시적으로 지정되지 않았지만 기본값은 Input이므로 요구 사항을 충족합니다. SqlParameter 개체의 Direction 속성이 InputOutput, Output 또는 ReturnValue인 경우 해당 Direction 속성을 명확하게 명시해야 합니다. 예를 들어 다음 코드에서는 SqlParameter 개체의 Direction 속성이 Output임을 명확하게 선언합니다.
oParam.Direction = ParameterDirection.Output;
SourceColumn 속성은 DataTable 개체를 업데이트하기 위해 Update() 메서드가 호출될 때 DataColumn 개체를 일치시키는 데 사용됩니다. 정의할 때 이 속성을 선언하지 않은 경우 코드에서 SqlParameter 개체의 SourceColumn 속성을 명시적으로 지정해야 합니다.
SourceVersion 속성의 기본값은 데이터베이스에 업데이트될 값인 DataRow 개체의 해당 필드에 있는 현재 값입니다. 물론 SourceVersion 속성은 DataRow 개체의 해당 필드에 있는 원래 값, 즉 데이터베이스에서 얻은 초기 값을 가리킬 수도 있습니다. 데이터베이스 트랜잭션 처리 시스템에서 데이터 동기화 문제는 매우 중요합니다. 데이터 동기화를 감지할 수 있는 저장 프로시저를 구축해 보겠습니다.
절차 만들기 dbo.up_UpdatePublisherName
(
@pub_id 문자(4),
@pub_name varchar(40),
@Original_pub_name varchar(40)
)
처럼
존재하는 경우(pub_id를 선택하세요.
출판사로부터
여기서 (pub_id = @pub_id) AND (pub_name = @Original_pub_name))
시작하다
UPDATE 게시자 SET pub_name = @pub_name
어디(pub_id = @pub_id)
끝
반품
다음으로 위 애플리케이션의 저장 프로시저를 호출하여 게시자 이름을 업데이트합니다. 먼저, 원래 애플리케이션을 기반으로 비즈니스 로직 클래스-Publishers 클래스를 개선합니다.
1. SqlDataAdapter 개체의 UpdateCommand 속성으로 사용할 수 있는 새 SqlCommand 개체를 추가합니다.
개인 SqlCommand cmdUpdPubs;
2. 이 클래스의 생성자 Publishers() 함수를 업데이트하여 다음을 추가합니다.
// 게시자 이름을 업데이트하는 저장 프로시저를 참조하는 다른 SqlCommand 개체를 만듭니다.
cmdUpdPubs = 새로운 SqlCommand();
cmdUpdPubs.Connection = cnPubs;
cmdUpdPubs.CommandType = CommandType.StoredProcedure;
cmdUpdPubs.CommandText = "up_UpdatePublisherName";
//위의 SqlCommand 개체에 필요한 매개변수를 추가합니다.
cmdUpdPubs.Parameters.Add( "@pub_id", SqlDbType.Char, 4, "pub_id" );
cmdUpdPubs.Parameters.Add( "@pub_name", SqlDbType.VarChar, 40, "pub_name" );
SqlParameter updParam = 새 SqlParameter
( "@Original_pub_name", SqlDbType.VarChar, 40, "pub_name" );
updParam.SourceVersion = DataRowVersion.Original;
cmdUpdPubs.Parameters.Add( updParam );
3. SqlDataAdapter 개체의 UpdateCommand 속성을 위에 정의된 SqlCommand 개체로 지정합니다.
daPubs.UpdateCommand = cmdUpdPubs;
4. UpdatePublisherName() 메소드 추가:
공개 무효 UpdatePublisherName(DataSet dsChanges)
{
// 모든 변경 사항 업데이트
daPubs.Update(dsChanges);
}
애플리케이션의 비즈니스 로직 클래스가 완료된 후 기본 폼에 "Update Data Set"이라는 버튼을 추가하고 다음과 같이 버튼의 이벤트 응답 기능을 추가합니다.
private void 버튼1_Click(object sender, System.EventArgs e) { if ( ds.HasChanges() ) { pubs.UpdatePublisherName( ds.GetChanges() ) ds.Clear(); ds = pubs.GetPublisherInfo();
지금까지 애플리케이션의 비즈니스 로직 클래스와 기본 양식 클래스가 업데이트되었습니다. 이제 애플리케이션은 사용자의 변경 사항에 따라 데이터베이스의 관련 콘텐츠를 업데이트할 수 있습니다.
일곱. 요약:
이 기사에서는 저장 프로시저에 대한 기본 지식과 SqlDataAdapter 개체, DataSet 개체 등을 결합하여 .NET 데이터베이스 응용 프로그램에서 데이터 기반 응용 프로그램을 구축하는 방법을 소개합니다. 이 문서에서는 두 가지 유형의 저장 프로시저를 사용했습니다. 하나는 매개 변수가 없는 간단한 저장 프로시저이고, 다른 하나는 매개 변수가 있는 저장 프로시저이며 이러한 유형의 저장 프로시저를 호출해야 합니다. SqlParameter 개체에. 동시에 저장 프로시저에 데이터 업데이트 비즈니스 로직을 캡슐화하는 것이 애플리케이션의 관리성, 확장성 및 데이터베이스 보안을 향상시킬 수 있는 좋은 설계 방법이라는 것을 찾는 것은 어렵지 않습니다. 마찬가지로 데이터 삽입 및 삭제를 위한 비즈니스 논리는 저장 프로시저에 캡슐화되어 유사한 방식으로 애플리케이션에서 사용될 수 있습니다. 마지막으로, 이 글이 모든 분들께 큰 도움이 되기를 바랍니다.