2011. 6. 24. 02:00

1/4. 한 프로젝트에서 웹서비스 만들기
2/4. DB연결 하기
3/4. 리스트 주고 받고 - 서버 탐색기와 린큐를 이용한 방법
4/4. 리스트 주고 받고 - 클래스를 이용한 방법

이미 눈치 체신분도 있겠지만 DB연결하는건 그냥 웹서비스에서 C#이나 Asp.net에서 처럼 커낵션 연결하고 받아다가 날려주면 그만 입니다 ㅎㅎㅎㅎ


 
0.DB준비
설마 여기서 DB준비 예제까지 원하신건 아니겠조? ㅎㅎㅎㅎ
그건 나중에 기회되면 하도록 하고 테스트용 DB와 테이블을 하나 만들고 데이터를 주고받을 준비를 합시다.

저장프로시저
DataGet
DataSet

이렇게 두개를 만들었습니다.


 
1. 웹서비스에 DB연결 코드 추가
이전글에서 자세하게 설명 했으므로 여기서는 그냥 만들어 봅시다

먼저 유징을 추가합니다.

//mssql
using System.Data.SqlClient;
using System.Data;

위 두가지가 MSSql을 사용할때 필요한 녀석들입니다.

닷넷에서 DB를 연결할때 일반적인 순서가 커낵션을 만든후 커맨드로 날리는 방법입니다.


 
1-1. 커낵션과 커맨드 만들기

커낵션과 커맨드를 전역변수로 선언합니다.


SqlConnection msConn = null;  // DB서버 연결을 위한 객체
SqlCommand msComm = null;  // Command 객체


커맨드는 사용할때 필요하면 초기화를 하면되고 커낵션을 보통 한번선언하면 그대로 쓰게 됩니다,

웹서비스 생성자에 다음 코드를 추가합니다.

//커낵션 생성
msConn = new SqlConnection();
msConn.ConnectionString = "Server=danggun.net;DataBase=\"해당DB\";UId=\"로그인ID\";pwd=\"로그인 비밀번호\"";


 
1-2. DB연결코드
이제 웹서비스에서 DB를 연결하기위한 코드를 넣어보겠습니다.
일반적은 C#에서 DB에 연결하는 방법과 같기때문에 따로 설명을 하지는 않겠습니다.


		public string SetData(string strData)
		{
			string strReturn = "";

			msComm = new SqlCommand("DataSet", msConn);
			msComm.CommandType = CommandType.StoredProcedure;

			msComm.Parameters.Add("@strA", SqlDbType.VarChar).Value = strData;

			//커낵션 오픈
			msConn.Open();

			try
			{
				msComm.ExecuteNonQuery();
				strReturn = "성공";
			}
			catch( Exception e )
			{
				strReturn = "실패";
			}

			//커낵션 클로즈
			msConn.Close();

			//리턴
			return strReturn;
		}

		public string GetData()
		{
			string strReturn = "";

			msComm = new SqlCommand("DataGet", msConn);
			msComm.CommandType = CommandType.StoredProcedure;

			//커낵션 오픈
			msConn.Open();

			try
			{
				strReturn = msComm.ExecuteScalar().ToString();
			}
			catch( Exception ex )
			{
				strReturn = "실패";
			}

			//커낵션 클로즈
			msConn.Close();

			//리턴
			return strReturn;
		}


 
1-3. 웹서비스에 등록
저번글에서 설명한대로 웹서비스에 보이도록 등록 해줍니다.

[OperationContract]
string SetData(string strGetData);
[OperationContract]
string GetData();


 
1-4. 웹참조 업데이트
아까 참조추가한 웝참조에서 오른쪽 클릭을 한다음 업데이트를 클릭해 줍니다.


추가한 메소드가 보인다면 성공~


 
2. UI 구성


빨간 화살표의 2개 버튼에 각각 이벤트를 걸겠습니다.


 
3. 이벤트 걸기

이것도 이전글에서 자세하게 설명했으니 간단하게 넘어가겠습니다.

당연이 컴플릿트에 이벤트를 연결해야 겠조?

			//db데이터
			sc.GetDataCompleted += new EventHandler(sc_GetDataCompleted);
			sc.SetDataCompleted += new EventHandler(sc_SetDataCompleted);


웹서비스 결과를 받는 컴플릿 이벤트를 연결해 줍니다.

		void sc_SetDataCompleted(object sender, ServiceReference1.SetDataCompletedEventArgs e)
		{
			if ("실패" != e.Result)
			{
				MessageBox.Show("입력이 성공 했습니다.");
			}
			else
			{
				MessageBox.Show("입력이 실패 했습니다.");
			}
			
		}

		void sc_GetDataCompleted(object sender, ServiceReference1.GetDataCompletedEventArgs e)
		{
			if ("실패" != e.Result)
			{
				MessageBox.Show("DB 내용 : " + e.Result);
			}
			else
			{
				MessageBox.Show("입력이 실패 했습니다.");
			}
		}


이제 버튼을 누르면 웹서비스를 호출하게 합니다.


		private void butGet_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			//데이터 불러오기
			sc.GetDataAsync();
		}

		private void butSet_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			//데이터 저장
			sc.SetDataAsync(txtA.Text);
		}


 
4. 테스트
맨처음 텍스트 박스에 글을 넣고 셋을 하면 데이터가 DB에 저장됩니다.
반대로 겟을 누르면 메시지 박스로 입력한 값이 출력됩니다.
여러사람이 같이 테스트를 하면 맨마지막 사람의 입려값이 나오겠조? ㅎㅎㅎㅎㅎ

아래 샘플에 직접 테스트 해 봅시다.


 
5. 전체 코드



빌드까지 되있는 프로젝트 파일이나.....어차피 db커낵션이 없으니 바로 테스트는 힘들고 디비커낵션만들고 다시 빌드하면 테스트 가능합니다.