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 개체에 필요한 모든 매개변수의 이름과 데이터 유형을 읽는 것입니다. 이 메서드를 사용하면 저장된 모든 매개변수를 호출하는 공통 함수를 작성할 수 있습니다. 이 함수는 결과 집합을 반환하는 저장 프로시저의 일반 기능을 구현합니다. 간단하며 필요에 따라 개선할 수 있습니다.
함수 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())
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는 则不必为了查看返回参数而遍历所有记录。