Visual Basic .NET을 사용하여 ASP.NET에서 SQL Server 저장 프로시저를 호출하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 306574 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR306574
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Visual Basic .NET에서 ASP.NET과 ADO.NET을 사용하여 입력 매개 변수와 출력 매개 변수가 있는 Microsoft SQL Server 저장 프로시저를 만들고 호출하는 방법을 보여 줍니다.

이 문서의 코드 예제는 먼저 사용자가 만들 저장 프로시저가 데이터베이스에 있는지 여부를 확인합니다. 저장 프로시저가 없을 경우 코드는 하나의 매개 변수를 사용하여 이름(성)에 따라 Authors 테이블을 검색하고 출력 매개 변수에 반환된 것과 같은 행과 행 수를 반환합니다.

또한 이 문서에서는 간단한 사용자 인터페이스를 제공하는 Web Form을 만드는 방법을 보여 줍니다. Web Form에는 다음 항목이 포함됩니다.
  • 사용자가 검색 조건을 입력하는 입력란
  • 검색 결과를 표시하는 DataGrid 컨트롤
  • 반환된 레코드의 개수를 표시하는 Label 컨트롤
  • 단추를 클릭할 때 저장 프로시저를 호출하는 Button 컨트롤

요구 사항

다음은 권장하는 하드웨어, 소프트웨어, 네트워크 인프라 및 서비스 팩입니다.
  • Microsoft SQL Server 버전 7.0 이상
  • Microsoft Visual Studio .NET
  • Microsoft Visual Basic .NET
  • 데이터베이스에 저장 프로시저를 만들기 위한 권한
이 문서에서는 사용자가 다음 제품을 잘 알고 있는 것으로 가정합니다.
  • SQL Server 저장 프로시저

ASP.NET 프로젝트 만들기 및 컨트롤 추가

이 절에서는 ASP.NET 프로젝트를 만들고 기본 사용자 인터페이스를 작성합니다. 이 단계는 Microsoft Visual Basic .NET 코드를 사용합니다. 프로젝트를 만들려면 다음과 같이 하십시오.
  1. 시작을 클릭하고 프로그램, Microsoft Visual Studio .NET을 차례로 가리킨 다음 Microsoft Visual Studio .NET을 클릭합니다.
  2. Visual Studio .NET 시작 페이지에서 새 프로젝트를 클릭합니다.
  3. 새 프로젝트 대화 상자의 프로젝트 형식에서 Visual Basic 프로젝트를 클릭한 다음 템플릿에서 ASP.NET 웹 응용 프로그램을 클릭합니다.
  4. 이름 상자에 해당 웹 응용 프로그램의 이름을 입력한 다음 확인를 클릭합니다.
  5. 다음 서버 컨트롤을 Web Form에 추가하고 아래 표와 같이 속성을 설정합니다.
    표 축소표 확대
    컨트롤ID 속성텍스트 속성
    LabellblLastName만든 이의 성을 입력합니다.
    TextBoxtxtLastName%
    ButtonbtnGetAuthorsGet Authors
    LabellblRowCount(행 수)

  6. 도구 상자에서 Web Form으로 DataGrid 서버 컨트롤을 끌어온 다음 Name 속성을 GrdAuthors로 설정합니다.
  7. 모눈을 마우스 오른쪽 단추로 클릭한 다음 자동 서식을 클릭합니다.
  8. 구성표로 Professional 1을 클릭한 다음 확인을 클릭합니다.

GetAuthorsByLastName 저장 프로시저 만들기

다음 Transact-SQL 코드를 사용하여 GetAuthorsByLastName 저장 프로시저를 만듭니다.
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */ 
select @RowCount=@@ROWCOUNT
				
이 코드에는 @au_lname과 @RowCount의 두 가지 매개 변수가 포함되어 있습니다. @au_lname 매개 변수는 Authors 테이블에서 "동일" 검색을 수행하는 검색 문자열이 포함된 입력 매개 변수입니다. @RowCount 매개 변수는 영향을 받는 행을 얻기 위해 @@ROWCOUNT 변수를 사용하는 출력 매개 변수입니다.

저장 프로시저 만들기 및 실행

SQL Server 데이터베이스에 액세스하려면 SqlDataReaderSqlDataAdapter 개체와 같은 새 개체를 제공하는 System.Data.SqlClient 네임스페이스를 가져와야 합니다. SqlDataReader를 사용하여 SQL Server 데이터베이스에서 정방향 전용 행 스트림을 읽을 수 있습니다. DataAdapterDataSet 개체를 채우고 SQL Server 데이터베이스를 업데이트하는 데 사용할 수 있는 데이터 명령 집합과 데이터베이스 연결을 나타냅니다.

또한 ADO.NET은 데이터 원본에 관계 없이 일관성 있는 관계형 프로그래밍 모델을 제공하는 데이터의 메모리 상주 표현인 DataSet 개체를 사용합니다. 이 절의 코드는 이러한 모든 개체를 사용합니다.
  1. Web Form을 두 번 클릭합니다.
  2. 다음 코드를 코드 창의 맨 윗부분인 선언 영역에 추가합니다.
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. 해당 저장 프로시저가 있는지 확인하고 새 저장 프로시저를 만들려면 SqlCommand 개체와 SqlDataReader 개체를 사용합니다. SqlCommand를 사용하여 데이터베이스에 대해 SQL 명령을 실행할 수 있습니다. 그런 다음 SqlCommandExecuteReader 메서드를 호출하여 쿼리에 일치하는 행이 포함된 SqlDataReader를 반환합니다.

    Web Form의 Page_Load 이벤트에 아래 코드를 추가합니다.
    'Only run this code the first time the page is loaded.
    'The code inside the IF statement is skipped when you resubmit the page.
    If Not IsPostBack Then
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand
        Dim MyDataReader As SqlDataReader
    
        'Create a Connection object.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a Command object, and then set the connection.
        'The following SQL statements check whether a GetAuthorsByLastName stored procedure 
        'already exists.
        MyCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MyConnection)
    
        With MyCommand
            'Set the command type that you will run.
            .CommandType = CommandType.Text
    
            ' Open the connection.
            .Connection.Open()
    
            'Run the SQL statement, and then get the returned rows to the DataReader.
            MyDataReader = .ExecuteReader()
    
            'If any rows are retuned, the stored procedure that you are trying 
            'to create already exists. Therefore, try to create the stored procedure
            'only if it does not exist.
            If Not MyDataReader.Read() Then
                .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
                                "@RowCount int output) " & _ 
    
                                " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
                MyDataReader.Close()
                .ExecuteNonQuery()
            Else 
                MyDataReader.Close()
            End If
    
            .Dispose()  'Dispose of the Command object.
            MyConnection.Close() 'Close the connection.
        End With
    End If
    					
  4. btnGetAuthors 단추의 Click 이벤트에서 이 저장 프로시저를 호출한 다음 SqlDataAdapter 개체를 사용하여 저장 프로시저를 실행합니다. 저장 프로시저용 매개 변수를 만들고 SqlDataAdapter 개체의 Parameters 컬렉션에 추가해야 합니다.

    Page_Load 이벤트 다음에 아래 코드를 추가합니다.
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles btnGetAuthors.Click
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyDataAdapter As SqlDataAdapter
    
        'Create a connection to the SQL Server.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a DataAdapter, and then provide the name of the stored procedure.
        MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
        'Set the command type as StoredProcedure.
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Create and add a parameter to Parameters collection for the stored procedure.
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        'Assign the search value to the parameter.
        MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Create and add an output parameter to Parameters collection. 
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Set the direction for the parameter. This parameter returns the Rows returned.
        MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Create a new DataSet to hold the records.
        MyDataAdapter.Fill(DS, "AuthorsByLastName") 'Fill the DataSet with the rows returned.
    
        'Get the number of rows returned, and then assign it to the Label control.
        'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
        lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Value & " Rows Found!"
    
        'Set the data source for the DataGrid as the DataSet that holds the rows.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Bind the DataSet to the DataGrid. 
        ' NOTE: If you do not call this method, the DataGrid is not displayed!
        Grdauthors.DataBind()
    
        MyDataAdapter.Dispose() 'Dispose of the DataAdapter.
        MyConnection.Close() 'Close the connection.
    End Sub
    					
  5. 솔루션 탐색기에서 .aspx 페이지를 마우스 오른쪽 단추로 클릭한 다음 시작 페이지로 설정을 클릭합니다.
  6. Visual Studio .NET에서 프로젝트를 저장하고 시작을 클릭합니다. 프로젝트가 컴파일되고 기본 페이지가 실행됩니다.
  7. 텍스트 상자에 만든 이의 이름을 입력한 다음 Get Author를 클릭합니다. 저장 프로시저가 호출되고 반환된 행이 DataGrid를 채웁니다.

    "G"로 시작하는 성을 가진 모든 만든 이를 반환하는 G%와 같은 SQL Server 형식 검색 문자열을 제공할 수 있습니다.

문제 해결

  • 데이터베이스에 연결할 수 없으면 ConnectionString이 SQL Server가 실행 중인 서버를 제대로 가리키는지 확인합니다.
  • 데이터베이스에 연결할 수는 있지만 저장 프로시저를 만들려고 할 때 문제가 발생하면 연결하려는 데이터베이스에 저장 프로시저를 만들 올바른 권한이 있는지 확인합니다.

참조

자세한 내용은 Microsoft .NET Framework SDK(소프트웨어 개발 키트) 문서의 다음 항목을 참조하십시오.
ADO.NET의 개요
http://msdn.microsoft.com/ko-kr/library/h43ks021.aspx

ADO.NET DataSet
http://msdn.microsoft.com/ko-kr/library/zb0sdh0b(VS.71).aspx

.NET 데이터 공급자를 사용하여 데이터에 액세스
http://msdn2.microsoft.com/ko-kr/library/s7ee2dwt(vs.71).aspx
ADO.NET 또는 Visual Basic .NET에 대한 자세한 내용은 다음 MSDN 뉴스그룹을 참조하십시오.
microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb
자세한 내용은 다음 서적을 참조하십시오.
Wyke, R. Allen, and Sultan Rehman and Brad Leupen. XML Programming (Core Reference). Microsoft Press, 2001.
자세한 내용은 Microsoft 교육 및 인증 과정을 참조하십시오.
2389 ADO.NET을 사용한 프로그래밍
Microsoft Active Server Pages를 사용하여 이 작업을 수행하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
300488 ASP Page에서 SQL 저장 프로시저를 실행하는 방법

속성

기술 자료: 306574 - 마지막 검토: 2012년 10월 24일 수요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
키워드:?
kbhowtomaster kbsqlclient kbsystemdata KB306574

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com