블로그 이미지
따시쿵

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

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

 

 

소스 파일

MyLINQ9.zip

 

posted by 따시쿵