프로그래밍/WPF, Silverlight
[Silverlight] 2/4. DB연결 하기
당근천국
2011. 6. 24. 02:00
1/4. 한 프로젝트에서 웹서비스 만들기 2/4. DB연결 하기 3/4. 리스트 주고 받고 - 서버 탐색기와 린큐를 이용한 방법 4/4. 리스트 주고 받고 - 클래스를 이용한 방법 |
이미 눈치 체신분도 있겠지만 DB연결하는건 그냥 웹서비스에서 C#이나 Asp.net에서 처럼 커낵션 연결하고 받아다가 날려주면 그만 입니다 ㅎㅎㅎㅎ
|
0.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에 연결하는 방법과 같기때문에 따로 설명을 하지는 않겠습니다.
일반적은 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. 테스트 |
반대로 겟을 누르면 메시지 박스로 입력한 값이 출력됩니다.
여러사람이 같이 테스트를 하면 맨마지막 사람의 입려값이 나오겠조? ㅎㅎㅎㅎㅎ
아래 샘플에 직접 테스트 해 봅시다.
|
5. 전체 코드 |
빌드까지 되있는 프로젝트 파일이나.....어차피 db커낵션이 없으니 바로 테스트는 힘들고 디비커낵션만들고 다시 빌드하면 테스트 가능합니다.