2015. 7. 9. 10:57
C# with LINQ to SQL
이번 포스트를 위해서 기존에 사용하던 프로그램을 MDI 폼으로 수정을 했으며,
메뉴 상단에 [Table] 이란 메뉴를 추가해서 기존에 테스트로 사용하던 [Customer] 테이블을 조회하는 화면과, 이번 포스트에 사용하기 위해서 새로 만든 [Order] 폼 화면을 추가했습니다.
전체소스는 맨 하단에서 다운 받으면 됩니다.
1. 예제 시나리오
주문자 테이블을 전체 가져와서, 판매자 정보를 out parameter 로 가져오고, 주문 상세 정보를 datagridview 에 보여주는 방식입니다. 이해를 돕기 위해서 완료된 화면부터 확인 하세요.
상단의 [주문정보] 테이블에서 셀 안에 있는 정보(문자)를 더블클릭을 [판매자 정보]와 [주문 상세정보]를 가져옵니다. 마스터 테이블에는 [EmployeeID] 필드만 있어서 판매자의 이름과, 직위, 생일, 입사일을 보여 줍니다.
2. stored procedure 를 만듭니다.
CREATE PROCEDURE dbo.GetOrderDetailsInfo @OrderID int, @EmployeeID int, @LastName nvarchar(20) out, @FirstName nvarchar(10) out, @Title nvarchar(30) out, @BirthDate nchar(10) out, @HireDate nchar(10) out AS BEGIN SET NOCOUNT ON; -- 1. 판매자 정보를 가져 옵니다. SELECT @LastName = LastName, @FirstName = FirstName, @Title = Title, @BirthDate = CONVERT(nchar(10), BirthDate, 120), @HireDate = CONVERT(nchar(10), HireDate, 120) FROM [dbo].[Employees] WHERE [EmployeeID] = @EmployeeID -- 2. 주문 상세정보를 가져 옵니다. SELECT OrderID, ProductID, UnitPrice, Quantity, Discount FROM [dbo].[Order Details] WHERE [OrderID] = @OrderID END
3. 스토어드 프로시저를 테스트 합니다.
DECLARE @LastName nvarchar(20) ,@FirstName nvarchar(10) , @Title nvarchar(30), @BirthDate nchar(10), @HireDate nchar(10) EXECUTE dbo.GetOrderDetailsInfo 10248, 5, @LastName out, @FirstName out, @Title out, @BirthDate out, @HireDate out SELECT @LastName + ':' + @FirstName + ':' + @Title + ':' + @BirthDate + ':' + @HireDate
4. Visual Studio 로 돌아와서 dbml 파일을 열고, 2번에서 만든 스토어드 프로시저를 선택하고 프로그램에 포함 시킵니다.
그리고, [주문 정보] datagridview control 의 이벤트 중에 CellContentDoubleClick 를 추가하고 다음의 소스를 붙여넣기 합니다.
#region Row double click event private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; //디버깅 용도로 사용함 string displayStr = row.Cells["OrderID"].Value.ToString() + "-" + row.Cells["EmployeeID"].Value.ToString(); Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); Trace.AutoFlush = true; Trace.WriteLine(displayStr); // 출력창에 sql 문을 출력하는 명령문 int OrderID = Convert.ToInt32(row.Cells["OrderID"].Value.ToString()); int EmployeeID = Convert.ToInt32(row.Cells["EmployeeID"].Value.ToString()); string Employee_LastName = string.Empty; string Employee_FirstName = string.Empty; string Employee_Title = string.Empty; string Employee_BirthDate = string.Empty; string Employee_Hiredate = string.Empty; using(northwindDataContext dbContext = new northwindDataContext()) { // call stored procedure and assign the datagridview detail control // and display the out parameters data in the screen. dataGridView2.DataSource = dbContext.GetOrderDetailsInfo(OrderID, EmployeeID, ref Employee_LastName, ref Employee_FirstName, ref Employee_Title, ref Employee_BirthDate, ref Employee_Hiredate); textEmployeeID.Text = row.Cells["EmployeeID"].Value.ToString(); textLastName.Text = Employee_LastName; textFirstName.Text = Employee_FirstName; textTitle.Text = Employee_Title; textBirthDate.Text = Employee_BirthDate; textHireDate.Text = Employee_Hiredate; } } } #endregion
소스 파일
'C# with LINQ to SQL' 카테고리의 다른 글
Lazy loading (0) | 2015.08.07 |
---|---|
SqlMetal 을 이용해서 dbml 파일 만들기 (0) | 2015.07.15 |
LINQ - 스토어드 프로시저를 이용한 insert, update, delete 연산 (0) | 2015.07.07 |
LINQ - 스토어드 프로시저 호출 (select) (0) | 2015.07.06 |
LINQ - SQL 쿼리문 보기 (0) | 2015.07.02 |