이번 포스트를 위해서 기존에 사용하던 프로그램을 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