저장프로시저를 이용한 다중테이블 입력 방법
예 : Customers와 CustomersInfo 두 테이블 있고 회원가입시
Customers에는 UserName, Password, Email을 입력하고
CustomerInfo에는 FullName과 Customers에 Primary Key인 CustomerID를 입력한다면
DB에 Stored Procedure 생성
CREATE PROCEDURE [InsertCust]
@Username VARCHAR(10),
@Password CHAR(40),
@Email VARCHAR(100),
@Fullname NVARCHAR(10)
AS
DECLARE @CustomerID INT;
BEGIN TRY
INSERT INTO [Customers] VALUES(@Username, @Password, @Email);
SELECT @CustomerID = [CustomerID] FROM [Customers] WHERE [UserName] = @Username;
INSERT INTO [CustomerInfo]([CustomerID], [FullName]) VALUES(@CustomerID, @Fullname);
END TRY
BEGIN CATCH
RETURN ERROR_NUMBER()
END CATCH
GO
Entity설정
[Function(Name="dbo.InsertCust")]
public int InsertCust(
[Parameter(Name="Username",DbType="VarChar(10)")] string username,
[Parameter(Name="Password",DbType="Char(40)")] string password,
[Parameter(Name="Email",DbType="VarChar(100)")] string email,
[Parameter(Name="FullName",DbType="NVarChar(30)")]string fullname)
{
IExecuteResult result = this.ExecuteMethodCall(
this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
username, password, email, fullname);
return ((int)(result.ReturnValue));
}
사용방법
CustomersEntity entity = new CustomersEntity(conn);
int insert = entity.InsertCust("tomebody", "han001122", "tome@naver.com", "Tome kim");
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
저장프로시저를 이용한 다중테이블 조회 방법
예 : CustomerInfo, Products, Orders 3개의 테이블이 있다고 가정
CustomerInfo에서는 FullName,
Products에서는 ProductName,
Orders에서는 UnitPrice, Amount를 읽어온다.
단 CustomerID, ProductID를 기준값으로
DB에 Stored Procedure 생성
CREATE PROCEDURE [SelectOrderInfo] @CustomerID INT, @ProductID INT
AS
SELECT c.FullName, p.ProductName, o.Quantity, (o.Quantity * p.UnitPrice) AS [Amount]
FROM [CustomerInfo] c
JOIN [Orders] o
On c.CustomerID = o.CustomerID
JOIN [Products] p
On o.ProductID = p.ProductID
WHERE c.CustomerID = @CustomerID And o.ProductID = @ProductID
GO
Entity설정
[Function(Name="dbo.SelectOrderInfo")]
public ISingleResult<SelectOrderInfoResult> SelectOrderInfo(
[Parameter(Name="CustomerID",DbType="Int")]int CustomerID,
[Parameter(Name="ProductID",DbType="Int")]int ProductID)
{
IExecuteResult result = this.ExecuteMethodCall(
this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
CustomerID, ProductID);
return((ISingleResult<SelectOrderInfoResult>)(result.ReturnValue));
}
public partial class SelectOrderInfoResult
{
[Column]public string FullName { get; set; }
[Column]public string ProductName { get; set; }
[Column]public int Quantity { get; set; }
[Column]public int Amount { get; set; }
}
SelectProcedure entity = new SelectProcedure(conn);
Entity설정
ISingleResult<SelectOrderInfoResult> Result = entity.SelectOrderInfo(1, 1);
foreach (SelectOrderInfoResult item in Result)
{
Console.WriteLine("{0}-{1}-{2}-{3}",
rs.FullName,
rs.ProductName,
rs.Quantity,
rs.Amount);
}
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
ISingleResult<TEntity> : 저장 프로시저의 실행 결과로 리턴되는 엔티티 클래스의 단일 결과집합을 가진다.
댓글 없음:
댓글 쓰기