> 백엔드 개발 > C#.Net 튜토리얼 > ADO.NET은 저장 프로시저를 호출합니다.

ADO.NET은 저장 프로시저를 호출합니다.

巴扎黑
풀어 주다: 2016-12-20 17:05:43
원래의
1721명이 탐색했습니다.

1: 반환 매개변수 없이 저장 프로시저를 실행합니다(입력)
1: 먼저 addUser 저장 프로시저 생성과 같은 저장 프로시저를 데이터베이스에 작성합니다.
Proc addUser 생성
@ID int,
@Name varchar(20),
@Sex varchar(20)
As
사용자 값에 삽입( @ID, @Name, @Sex )


2: SqlCommand 개체를 만들고 다음과 같이 SqlCommand 개체를 초기화합니다.
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = "addUser"; // 호출하기 which 저장 프로시저
cmd.CommandType = CommandType.StoredProcedure; // Sql 명령 유형을 저장 프로시저로 설정하고 기본값은 Sql 문입니다.
cmd.Connection = con; // 연결 설정

3: SqlCommand 개체에 저장 프로시저 매개 변수 추가
SqlParameter param = new SqlParameter( ) // 매개 변수 개체 정의
param .ParameterName = "@ID"; //저장된 프로시저 매개변수 이름
param.Value = txtID.Text.Trim(); //이 매개변수의 값
cmd.Parameters.Add( param ); / SqlCommand 개체가 이 매개 변수를 추가합니다. object

param = new SqlParameter( "@Name", txtName.Text.Trim() ) // 약어
cmd.Parameters.Add( param );

4: SqlCommand 개체는 Sql을 실행하는 함수를 호출합니다. 예:
cmd.ExecuteNonQuery();

2: 반환 매개변수를 사용하여 저장 프로시저 실행(출력)
1: 먼저 저장된 queryUser 생성과 같은 저장 프로시저를 데이터베이스에 작성합니다. 절차.
alter Proc queryUser
@ID int,
@Suc varchar(10) 출력
As
select @Suc= 'false'
존재하는 경우( Select * From users where u_id = @ID )
select @Suc = 'success'

2: SqlCommand 개체를 만들고 SqlCommand 개체를 초기화합니다.
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = " queryUser"; //호출할 저장 프로시저 지정
cmd.CommandType = CommandType.StoredProcedure; //Sql 명령 유형이 저장 프로시저이고 기본값이 Sql 문임을 지정합니다.
cmd.Connection = con; // 연결 설정

3: SqlCommand 개체에 저장 프로시저 매개변수 추가
SqlParameter param1 = new SqlParameter( "@ID", txtID.Text ); / 입력 매개변수 추가
cmd.Parameters.Add( param1 );

SqlParameter param2 = new SqlParameter(); // 출력 매개변수 추가
param2.ParameterName = "@Suc";
param2.SqlDbType = SqlDbType.VarChar; //출력 매개변수의 SQL 유형
param2.Size = 10;//출력 매개변수의 SQL 유형 크기
param2.Direction = ParameterDirection.Output; 매개변수 개체는 출력 매개변수 유형입니다.
cmd.Parameters.Add( param2 )

4: SqlCommand 개체는 Sql을 실행하는 함수를 호출합니다. 예:
cmd.ExecuteNonQuery();
MessageBox.Show( param2.Value.ToString() ); // 출력 매개변수의 값 출력

입력 매개변수에 대한 저장 프로시저의 예 :
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "addUser" ;

SqlParameter param = new SqlParameter( );
param.ParameterName = "@ID";
param.Value = txtID.Text.Trim();
cmd.Parameters.Add ( param ) ;

param = new SqlParameter( "@Name", txtName.Text.Trim() );
cmd.Parameters.Add( param );

param = new SqlParameter() ;
param.ParameterName = "@Sex";
param.Value = txtSex.Text.Trim();
cmd.Parameters.Add( param );

/ /da.InsertCommand = cmd;

if ( cmd.ExecuteNonQuery() == 1 )
{
MessageBox.Show( "성공적으로 추가됨" );
}
else
{
MessageBox.Show("실패");
}
}
catch( SqlException ex )
{
MessageBox.Show( ex.Message );
}

매개변수를 출력하는 저장 프로시저의 예:
try
{
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = "queryUser";
cmd. CommandType = CommandType .StoredProcedure;
cmd.Connection = con;

SqlParameter param1 = new SqlParameter( "@ID", txtID.Text );
cmd.Parameters.Add( param1 );

SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@Suc";
param2.SqlDbType = SqlDbType.VarChar;
param2.Size = 10;
param2. 방향 = ParameterDirection .Output;
cmd.Parameters.Add( param2 );

cmd.ExecuteNonQuery();

MessageBox.Show( param1.Value.ToString() );
MessageBox .Show( param2.Value.ToString() );

}
catch( SqlException ex )
{
MessageBox.Show( ex.Message );
}

ado.net에서 반환 값을 가져오는 방법은 (c#)입니다.
------------------------- ------- --------
SqlConnection dbconn = 새 SqlConnection( connStr);
SqlCommand cmd = new SqlCommand("sp_uptmp",dbconn);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter tmpName = cmd.Parameters.Add("@tmpName", SqlDbType.VarChar);
SqlParameter srcPos = _cmd.Parameters.Add("@srcPos",SqlDbType.VarChar);
SqlParameter rtnval = cmd.Parameters.Add("rval",SqlDbType.Int);

tmpName.Direction = ParameterDirection.Input;
srcPos.Direction = ParameterDirection.Input;
rtnval.Direction = ParameterDirection.ReturnValue;

tmpName.Value = "";
srcPos.Value = "";
dbconn.Open();
cmd.ExecuteNonQuery();
dbconn.Close();

tmpid = (int)rtnval.Value; //반환 값입니다

다음과 같은 저장 프로시저가 있다고 가정합니다.
------------- -- ---------------------

CREATE proc sp_uptmp @tmpName varchar(50 ),@srcPos varchar( 255)
as

Begin TRAN
t_template 값에 삽입(@tmpName,@srcPos)
COMMIT

반환 isnull(@@identity ,0)
GO


----------------------------------- ------ -------
ado.net에서 반환 값을 가져오는 방법은 (c#):
-- ------- ----------------- ------- -
SqlConnection dbconn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand("sp_uptmp",dbconn);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter tmpName = cmd .Parameters.Add("@tmpName",SqlDbType.VarChar);
SqlParameter srcPos = _cmd.Parameters.Add("@srcPos",SqlDbType.VarChar);
SqlParameter rtnval = cmd.Parameters.Add(" rval",SqlDbType.Int);

tmpName.Direction = ParameterDirection.Input;
srcPos.Direction = ParameterDirection.Input;
rtnval.Direction = ParameterDirection.ReturnValue ;

tmpName.Value = "";
srcPos.Value = "";
dbconn.Open();
cmd.ExecuteNonQuery();
dbconn.Close() ;

tmpid = (int)rtnval.Value; //이것이 반환 값입니다

ADO 환경에서 데이터를 쿼리하기 위해 저장 프로시저를 호출할 때의 일반적인 관행은 다음과 같습니다.
1 연결 명령 개체 생성
2 연결을 열고 명령에 매개 변수의 이름, 데이터 유형 및 값 할당
3 명령 개체 실행
4 레코드 집합 개체를 클라이언트에 반환
이런 방식으로 저장 프로시저를 호출할 때마다 저장 프로시저의 지침을 따라야 합니다. 예를 들어 저장 프로시저에 @ID int 두 개의 매개 변수가 필요한 경우 매개 변수의 데이터 형식이 생성됩니다. 및 @Name varchar(10),
'매개변수 생성
cmd.Parameters.Append cmd.CreateParameter("@ID ",adInteger,adParamInput,4)
cmd.Parameters.Append cmd가 필요합니다. CreateParameter("@Name",adVarChar,adParamInput,10)
'매개변수에 값 할당
cmd("@State") = 1
cmd("@WhereT")=”2”
저장 프로시저를 호출할 때마다 저장 프로시저의 모든 매개변수를 수동으로 추가해야 하며 매개변수의 데이터 유형과 저장 프로시저의 매개변수 정보가 일관성을 유지하도록 자신의 두뇌력을 사용해야 합니다.
Command.Parameters 개체에는 Refresh 메서드가 있습니다. 이 메서드의 기능은 현재 Command 개체에 필요한 모든 매개변수의 이름과 데이터 유형을 읽는 것입니다. 이 메서드를 사용하면 저장된 모든 매개변수를 호출하는 공통 함수를 작성할 수 있습니다. 이 함수는 결과 집합을 반환하는 저장 프로시저의 일반 기능을 구현합니다. 간단하며 필요에 따라 개선할 수 있습니다.

'Visual Basic 6.0에서 디버깅이 통과되었습니다.

함수 GetRsByPro(strConnString As String, strProName As String, arjParameter() As String)
' 쿼리된 레코드 세트를 반환합니다.
' strConnString 데이터 연결 문자열
' strProName 저장 프로시저 이름
' arjParameter () 저장 프로시저에 필요한 배열
On Error GoTo errMsg
'Create ADO object
Dim Cmd As New Command
' ASP Con = Server.CreateObject("ADODB.Connection")
Dim Con As New Connection
' ASP Set Cmd = Server.CreateObject("ADODB.Command")
Dim Rs As New Recordset
' ASP Set rs = Server.CreateObject("ADODB.Recordset")

'데이터베이스 열기
Con.Open strConnString
Set Cmd.ActiveConnection = Con
Cmd.Commandtype = adCmdStoredProc
Cmd.Parameters.Refresh
If UBound(arjParameter) < > ; Cmd.Parameters.Count Then
Debug.Print "매개변수 개수가 잘못되었습니다."
Exit Function
End If

'저장 프로시저 매개변수에 값 할당
i = 0의 경우 Cmd .Parameters.Count - 1
Cmd.Parameters(i).Value = arjParameter(i)
다음

'Set Recordset 개체
Rs.CursorType = 3
Rs.LockType = 3
Rs.CursorLocation = 3
Set Rs.Source = Cmd
Rs.Open

'반환 결과 집합
GetRsByPro = Rs 설정

'데이터 소스 닫기
Con.Close
Set Con = Nothing
errMsg:
Debug.Print Err.Description
함수 종료

'데모 호출

Dim Rs As New Recordset
StrConnString=””
StrProName=”pro_GetAllUser”
Dim arjParameter(1)
arjParameter(0)=”1”
arjParameter(1)=” Shandong”
Set Rs= GetRsByPro(strConnString, strProName, arjParameter())

.NET 개발 환경에서 동일한 방법을 사용하면 저장 프로시저를 호출하는 일반적인 방법을 만들 수도 있습니다.

ADO.NET에서 OleDbCommand.Parameters 개체와 SqlCommand.Parameters 개체에는 저장 프로시저의 매개 변수 정보를 읽는 Refresh 메서드가 없습니다. .NET은 동일한 기능을 달성하기 위해 OleDbCommandBuilder 클래스에 DeriveParameters 정적 메서드를 제공합니다. .
.NET SDK의 DeriveParameters 설명
"SqlCommand에 지정된 저장 프로시저의 매개 변수 정보를 사용하여 지정된 SqlCommand 개체의 매개 변수 컬렉션을 채웁니다.

SqlConnection Conn=new SqlConnection(cnString);
Conn.Open();
SqlCommand Comm=new SqlCommand();
Comm.Connection =conn;
Comm.CommandType =CommandType. StoredProcedure ;
Comm.CommandText =proName;
SqlCommandBuilder.DeriveParameters(comm);
//이 메서드 이후에는 SqlCommand 개체의 SqlParameters 개체가 저장 프로시저의 정보를 확인하는 데 도움이 되었습니다.
구현 실행 모든 저장 프로시저는 DataSet 개체의 특정 함수 코드를 반환합니다.
파일 이름: TestSqlAccess.cs
//
using System;
using System.Data;
를 통해 vs.net에서 디버그합니다. System.Xml 사용;
System.Data.SqlClient 사용;
System.Data.OleDb 사용;
System.Collections 사용;

네임스페이스 Erp
{
공개 봉인 class TestSqlAccess
{
#region 저장 프로시저 매개변수 컬렉션 가져오기
public static SqlParameter [] getParameters(string cnString,string proName)
{
SqlConnection conn=new SqlConnection(cnString);
conn.Open();
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.StoredProcedure;
comm.CommandText =proName;

SqlCommandBuilder.DeriveParameters(comm);
SqlParameter [] arPrm=new SqlParameter[comm.Parameters.Count];
for (int i=0;i {
arPrm[i]=new SqlParameter();
arPrm[i].SqlDbType =comm.Parameters[i].SqlDbType;
arPrm[i].ParameterName=comm.Parameters[i ].ParameterName;
arPrm[i].Size =comm.Parameters[i].Size;
}
return arPrm;
}
#endregion


# 영역은 Command 개체를 실행하고 DataSet을 반환합니다


/////Microsoft에서 제공하는 SqlHelper 클래스를 호출할 수 있습니다...

#endregion Command 개체를 실행하면 DataSet이 반환됩니다.

DataReader를 사용하여 행과 매개변수를 반환합니다

DataReader 개체를 사용하여 읽기 전용 전달 전용 데이터 스트림을 반환할 수 있습니다. DataReader에 포함된 정보는 저장 프로시저에서 가져올 수 있습니다. 이 예제에서는 DataReader 개체를 사용하여 입력 및 출력 매개 변수가 포함된 저장 프로시저를 실행한 다음 반환된 레코드를 반복하여 반환 매개 변수를 확인합니다.

 1. Microsoft SQL Server를 실행하는 서버에서 다음 저장 프로시저를 생성합니다: Create Procedure TestProcedure

 (

 @au_idIN varchar (11),

@numTitlesOUT 정수 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

 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 및 System.Data 네임스페이스에 using 문을 사용하면 후속 코드에서 이러한 네임스페이스의 선언을 정규화할 필요가 없습니다. 이 코드를 "Forms" 코드 모듈의 맨 위에 추가하십시오. 선택한 제공업체에 해당하는 코드만 복사하세요. System.Data.SqlClient를 사용하는 SQL 클라이언트;

System.Data.OleDb;

를 사용하는 OLE DB 데이터 공급자 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 ("이 저자의 책 제목:");

while (myReader.Read())

{

 Console.WriteLine ("{0}", myReader.GetString (2));

 };

 myReader.Close();

Console.WriteLine("행 수:" + NumTitles.Value );

Console.WriteLine("반환 값:" + 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 🎜 >

  ("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 ("이 저자의 책 제목:");

  while (myReader.Read())

{

  Console.WriteLine ("{0}", myReader.GetString (2));

  };

  myReader.Close();

  Console.WriteLine("행 수:" + NumTitles.Value );

  Console.WriteLine("반환 값:" + RetVal.Value);

  5. 修改 연결 对象的连接字符串,以便指向运行 SQL Server 的计算机。

  6.运行此代码。注意,DataReader 检索记录并返回参数值。您DataReader를 사용하여 읽기 방법을 읽어보세요.

  输出窗口显示两本书的标题、返回值 5 和输流参数,其中包含记录的数目 (2)。注,必必须关闭代码中的 DataReader才能看到参数值。另请注意,如果关闭了DataReader는 则不必为了查看返回参数而遍历所有记录。


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿