출력 매개변수를 갖는 저장 프로시저 ASP.NET에서 사용하기
출력 매개변수를 갖는 저장 프로시저를 ASP.NET에서 사용하기 위해서는 먼저 저장 프로시저에 대한 정의가 필요하다.
그리고 출력 매개변수 갯수에 따라서 사용하는 방식이 약간 다르다.
출력 매개변수가 1개일 경우에는 메서드를 만들어서 호출하여 처리를 한 후에 리턴 값으로 출력 매개변수를 넘겨주면 되지만
출력 매개변수가 2개 이상일 경우에는 리턴 값을 1개 이상 지정하기 위해서는 변수로는 되지 않는다.
출력 매개변수를 2개 이상을 리턴 받기 위해서는 클래스를 만들고 클래스를 이용하여 출력 매개변수를 넘겨 받으면 된다.
1. 출력 매개변수가 1개일 때
SQL Server에 저장 프로시저 만든다.
CREATE PROC sp_member_add
(
@Name varchar(50),
@Content varchar(300),
@Email varchar(50),
@No int OUTPUT
)
AS
INSERT INTO 테이블
(
name, content, email
)
VALUES
(
@Name, @Content, @Email
)
SELECT @No = @@Identity //전역변수로서 insert 후에 자동으로 증가되는 필드값이다. 이 외에도 자주 사용하는 전역변수로는 @@error = 0 이 있는데 이는 에러가 없을 때 정상 처리하고 다른 번호가 나오면 에러 처리하는 경우에 사용한다.
GO
다음은 ASP.NET에서 1개 출력 매개변수를 처리하는 예이다.
public member_add( string name, string content, string email )
{
데이터베이스 연결 객체를 만들고 오픈을 한다.
string dbinfo = @"Server=서버명;uid=아이디;pwd=패스워드;database=데이타베이스명";
SqlConnection conn;
conn = new SqlConnection( dbinfo );
conn.Open();
SqlCommand cmd = new SqlCommand("sp_member_add", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param1 = new SqlParameter("@Name", SqlDbType.VarChar, 50 );
param1.Value = name;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@Content", SqlDbType.VarChar, 300);
param2.Value = content;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@Email", SqlDbType.VarChar, 50);
param3.Value = email;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@No", SqlDbType.Int, 4); //데이터 크기를 생략할 수 있다.
param4.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param4);
cmd.ExecuteNonQuery();
conn.Close();
int no = (int) param4.Value;
return no;
}
2. 출력 매개변수가 2개 이상 일 때
SQL Server에 저장 프로시저 만든다.
CREATE PROC sp_get_member
(
@No int,
@Name varchar(50) OUTPUT,
@Content varchar(300) OUTPUT,
@Email varchar(50) OUTPUT
)
AS
SELECT @Name = name, @Content = content, @Email = email
FROM 테이블
WHERE no = @No
GO
다음은 ASP.NET에서 2개 이상 출력 매개변수를 처리하는 예이다.
우선 여러개의 출력 매개변수를 처리하기 위해서 클래스를 생성을 한다.
public class Meminfo
{
public string Name;
public string Content;
public string Email;
}
public MemInfo get_member( int no)
{
데이터베이스 연결 객체를 만들고 오픈을 한다.
string dbinfo = @"Server=서버명;uid=아이디;pwd=패스워드;database=데이타베이스명";
SqlConnection conn;
conn = new SqlConnection( dbinfo );
conn.Open();
SqlCommand cmd = new SqlCommand("sp_get_member", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param1 = new SqlParameter("@No", SqlDbType.Int, 4);
param1.Value = no;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@Name", SqlDbType.VarChar, 50);
param2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@Content", SqlDbType.VarChar, 300);
param3.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@Email", SqlDbType.VarChar, 50);
param4.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param4);
cmd.ExecuteNonQuery();
conn.Close();
MemInfo member = new MemInfo();
member.Name = (string) param2.Value;
member.Content = (string) param3.Value;
member.Email = (string) param4.Value;
return member;
}