저장프로시저를 이용한 다중테이블 입력 방법
예 : 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> : 저장 프로시저의 실행 결과로 리턴되는 엔티티 클래스의 단일 결과집합을 가진다.
댓글 없음:
댓글 쓰기