방법: ADO를 사용 하 여 매개 변수화 된 저장된 프로시저를 호출 합니다.NET 및 C#.NET

기술 자료 번역 기술 자료 번역
기술 자료: 310070 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

ADO를 사용 하는 방법은 여러 가지가 있습니다.저장된 프로시저를 호출 하 고 반환 값을 다시 가져올 및 반환 매개 변수를 포함 하 여 NET.
  • 반환 된 행을 수집 하 고 이러한 행 반환 값과 반환 매개 변수 외에 작업 하는 DataSet 개체를 사용 합니다.
  • DataReader 개체를 통해 이러한 행 및 수집 반환 값과 반환 매개 변수를 이동할 반환 된 행을 모으고 사용 합니다.
  • ExecuteScalar 메서드를 사용 하 여 반환 값과 반환 매개 변수와 함께 결과 첫 번째 행의 첫 번째 열에서 값을 반환 합니다. 집계 함수에 가장 유용합니다.
  • ExecuteNonQuery 메서드를 사용 하 여 반환 매개 변수 및 반환 값을 반환 합니다. 반환된 된 행이 삭제 됩니다. 실행 쿼리를 실행 하는 데 가장 유용 합니다.
이 문서에서는 마지막 세 가지 메서드를 보여 줍니다 및 SqlCommandOleDbCommand 개체를 사용 하 여. 사용 중인 관리 공급자의 코드만 복사 하는 것이 있는지 확인 합니다. 어떤 관리 공급자를 사용 해야 하는지 확실 하지 않으면 다음 Microsoft 개발자 네트워크 웹 사이트를 방문 하십시오.
.NET 데이터 공급자
이 기사의 샘플에서는 각 매개 변수를 명령 개체의 매개 변수 컬렉션에 추가 됩니다. SqlCommand 개체를 사용 하는 경우 특정 순서로 매개 변수를 추가 하지만 매개 변수는 올바른 이름으로 지정 해야 합니다. OleDbCommand 개체를 사용 하면 매개 변수를 올바른 순서로 추가 해야 및 매개 변수를 이름으로 사용할 수 없습니다.

Datareader를 사용 하 여 행 및 매개 변수를 반환 합니다.

DataReader 개체를 사용 하 여 읽기 전용, 정방향 전용 데이터 스트림을 반환 합니다 수 있습니다. DataReader 에 포함 된 정보는 저장된 프로시저에서 가져올 수 있습니다. 입력 및 출력 매개 변수를 가지 며 다음 반환 매개 변수를 보려면 반환 된 레코드 사이 이동 하는 저장된 프로시저를 실행 하려면 DataReader 개체를 추가 하는 예제입니다.
  1. Microsoft SQL Server 실행 하는 서버에서 다음 저장된 프로시저를 만듭니다.
    Create Procedure TestProcedure
    (
      @au_idIN varchar (11),
      @numTitlesOUT Integer OUTPUT
    )
    AS 
    
    select A.au_fname, A.au_lname, T.title 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    set @numTitlesOUT = @@Rowcount
    return (5) 
    					
  2. 새 Visual C#를 만듭니다.NET Windows 응용 프로그램 프로젝트를 만듭니다.
  3. 코드에서 나중에 해당 네임 스페이스의 선언을 한정 하지 않아도 있도록 시스템System.Data 네임 스페이스에 using 문을 사용 하 여. 이 코드는 폼의 코드 모듈 맨 위에 추가. 선택한 공급자의 코드만 복사 했는지 확인 합니다.SQL 클라이언트
    using System.Data.SqlClient;
    					
    OLE DB 데이터 공급자
    using System.Data.OleDb;
    					
  4. 개인 Form_Load 이벤트에서 코드를 다음 코드로 바꿉니다:SQL 클라이언트
    SqlConnection PubsConn = new SqlConnection 
    ("Data Source=server;integrated " + 
    "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
    ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
      ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", SqlDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output ;
            
    IdIn.Value = "213-46-8915";
    PubsConn.Open();
    
    SqlDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB 데이터 공급자
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", OleDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    OleDbDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. SQL Server 실행 중인 컴퓨터를 가리키는 연결 개체에 대 한 연결 문자열을 수정 합니다.
  6. 코드를 실행 합니다. DataReader 는 레코드를 검색 하 고 다음 매개 변수 값을 반환 됩니다. DataReader 개체의 Read 메서드를 사용 하면 반환 된 레코드 사이 이동할 수 있습니다.

    출력 창 두 개의 책 제목, 5 및 (2) 레코드 수가 들어 있는 출력 매개 변수가 반환 값을 표시 합니다. 매개 변수 값을 확인 하려면 DataReader 코드에서 닫아야 합니다 것을 알 수 있습니다. DataReader 가 닫힌 경우 반환 매개 변수를 참조 하십시오. 모든 레코드를 이동할 필요가 없습니다 또한 있습니다.

명령 개체의 ExecuteScalar 메서드를 사용 합니다.

매개 변수 값을 검색 하는 명령 개체의 ExecuteScalar 메서드를 사용할 수 있습니다. 또한 ExecuteScalar 저장된 프로시저의 첫 번째 행의 첫 번째 열을 반환합니다. 다음 예제에서와 같이 집계 함수에 가장 유용합니다.
  1. SQL Server 실행 하는 서버에서 다음 저장된 프로시저를 만듭니다.
    Create Procedure TestProcedure2
    (
      @au_idIN varchar (11)
    )
    As
    /* set nocount on */ 
    select count (T.title) 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    Return(5)
    					
  2. 새 Visual C#를 만듭니다.NET Windows 응용 프로그램 프로젝트를 만듭니다.
  3. 코드에서 나중에 해당 네임 스페이스의 선언을 한정 하지 않아도 있도록 시스템System.Data 네임 스페이스에 using 문을 사용 하 여. 이 코드는 폼의 코드 모듈 맨 위에 추가. 선택한 공급자의 코드만 복사 하는 것이 있는지 확인 합니다.SQL 클라이언트
    using System.Data.SqlClient;
    					
    OLE DB 데이터 공급자
    using System.Data.OleDb;
    					
  4. Form_Load 이벤트에 다음 코드를 추가:SQL 클라이언트
    string strCount;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated " + 
       "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount =testCMD.ExecuteScalar ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB 데이터 공급자
    string strCount;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount = testCMD.ExecuteScalar().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount);
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. SQL Server 실행 중인 컴퓨터를 가리키는 연결 개체에 대 한 연결 문자열을 수정 합니다.
  6. 코드를 실행 합니다. 명령 개체의 ExecuteScalar 메서드는 매개 변수를 반환 하는 확인할 수 있습니다. 또한 ExecuteScalar 1, 반환 된 행 집합의 행 1 열의 값을 반환합니다. 따라서 intCount 의 값은 저장 프로시저에서의 카운트 함수 결과입니다.

명령 개체의 ExecuteNonQuery 메서드를 사용 합니다.

이 샘플 ExecuteNonQuery 메서드를 사용 하 여 쿼리를 실행 하 고 매개 변수 값을 반환 합니다. ExecuteNonQuery 는 또한 쿼리를 실행 한 후에 영향을 받는 레코드 수를 반환 합니다. 그러나 ExecuteNonQuery 모든 행 또는 열은 저장된 프로시저에서 반환 하지 않습니다.

ExecuteNonQuery 메서드는 변경 된 행의 수를 알아야 할 경우 INSERT, UPDATE 또는 DELETE 문을 사용할 때 가장 유용 합니다. SELECT 문의을 사용 하는 저장된 프로시저에서 쿼리에 의해 영향을 받는 행이 없습니다. 때문에-1을 나타납니다.
  1. SQL Server 실행 하는 컴퓨터에서 다음 저장된 프로시저를 만듭니다.
    Create Procedure TestProcedure3
    (
      @au_idIN varchar (11),
      @au_fnam varchar (30)
    )
    
    As
    /* set nocount on */ 
    Update authors set au_fname = @au_fnam
    where au_id = @au_idin	
    return (5)
    					
  2. 새 Visual C#를 만듭니다.NET Windows 응용 프로그램 프로젝트를 만듭니다.
  3. 코드에서 나중에 해당 네임 스페이스의 선언을 한정 하지 않아도 있도록 시스템System.Data 네임 스페이스에 using 문을 사용 하 여. 이 코드는 폼의 코드 모듈 맨 위에 추가. 선택한 공급자의 코드만 복사 하는 것이 있는지 확인 합니다.SQL 클라이언트
    using System.Data.SqlClient;
    					
    OLE DB 데이터 공급자
    using System.Data.OleDb;
    					
  4. Form1 코드 모듈에서 개인 Form1_Load 이벤트 아래의 코드를 다음 코드로 바꿉니다:SQL 클라이언트
    string strRowAffect;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated Security=sspi;" + 
       "initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter FnameIn = testCMD.Parameters.Add 
       ("@au_fnam", SqlDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    
    strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strRowAffect );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB 데이터 공급자
    int intRowAffected;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter FnameIn = testCMD.Parameters.Add
       ("@au_fname", OleDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    intRowAffected = testCMD.ExecuteNonQuery();
    
    Console.WriteLine("Number of Rows affected: " + intRowAffected);
    Console.WriteLine(RetVal.Value);
    					
  5. SQL Server 실행 중인 컴퓨터를 가리키는 연결 개체에 대 한 연결 문자열을 수정 합니다.
  6. 코드를 실행 합니다. 출력 창 (intRowAffect)의 영향을 받는 행 개수와 반환 매개 변수의 값을 표시합니다.

참조

자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.
소개 하는.NET Framework 클래스 라이브러리

Datareader를 사용 하 여 데이터를 검색 합니다.

속성

기술 자료: 310070 - 마지막 검토: 2012년 6월 12일 화요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
키워드:?
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:310070

피드백 보내기

 

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