AJAX 방명록 만들기[7]

AJAX 방명록 만들기[7]
후~요즘 날씨가 너무 쌀쌀하네요!! AJAX 방명록 만들기 강좌를 빨리 끝내야하는데... 제가 좀 게을러서 늦어 지내요~^^캬캬~ 스파르타하게 빨리 빨리 올리도록 하겠습니다.^^
저번 내용은 데이터베이스는 만들어 보았습니다. 그럼 이제 작성한 글을 데이터베이스에 어떻게 연결해서 넘기게 되는지 확인해 보도록 하겠습니다. 일단 사용자가 글을 다쓰고 확인을 클릭하게 되면 비하인드코드에서 어떠한 일이 일어나는지 코드를 보시도록 하겠습니다!!
|
Guest_Board.aspx.cs페이지 |
|
protected boardClass bclass = new boardClass(); protected void WriteOK_Click(object sender, EventArgs e) { bclass.u_name = txtuserName.Text; bclass.u_pass = txtpassword.Text; bclass.u_content = txtContent.Text; bclass.u_ip = Request.UserHostAddress; bclass.icon = this.IMG_ICON.Value; bclass.Procedure(1); Text_Clear(); ListBind(); } |
위 코드는 확인 버튼을 클릭하고 나서 대충유효성 검사까지 완료 되면 비하인드코드에서 일어나는 행위들입니다. 코드에서 bclass는 boardClass를 인스턴트로 생성한 것 입니다. 코드 위 부분에 인스턴트로 생성한 코드가 보이시지요. 그래서 boardClass에 접근이 가능하겠지요.
이제부터 설명하는 아래내용은 위 코드를 중심으로 하나하나의 코드와 구현내용을 보도록 하겠습니다.
ㅁ Property
bclass.u_name : 작성자 닉네임을 boardClass의 변수값으로 넘김.
bclass.u_pass : 작성자 비밀번호를 boardClass의 변수값으로 넘김
bclass.u_content : 작성내용을 boardClass의 변수값으로 넘김.
bclass.u_ip : 작성자의 ip 주소를 boardClass의 변수값으로 넘김.
bclass.icon : 작성자가 선택한 아이콘의 파일명이 boardClass의 변수값으로 넘김.
아래 코드는 boardClass의 변수선언 코드와 Property 부분입니다.
|
boardClass.cs페이지 |
|
private string U_Name; private string U_Pass; private string U_Content; private string U_Ip; private string ICon; public string u_name { get { return U_Name; } set { U_Name = value; } } public string u_pass { get { return U_Pass; } set { U_Pass = value; } } public string u_content { get { return U_Content; } set { U_Content = value; } } public string u_ip { get { return U_Ip; } set { U_Ip = value; } } public string icon { set { ICon = value; } } |
저는 위와같이 코드를 짜보았습니다. 모 그냥 Property 만들지 않고 한페이지에서도 가능하지요! ^^;; 저는 초보라..ㅋ이렇게도 해보고 저렇게도 해보고 이렇고 있습니다.^^ㅋ 아무튼 이렇게 값들을 넘기고,그 다음에 코드를 보시면 bclass.Procedure(1); 코드가 있습니다. 이것은 어떻게 정의된 메소드인지 알아 보도록 하지요! 앞에 bclass. 이렇게 있는걸 보니..딱 boardClass에서 선언된 녀석이란걸 알수 있겠지요! 아래 코드로 확인해 보도록 하시지요!
|
boardClass.cs페이지 |
|
private dbClass dcon = new dbClass(); private string query; public void Procedure(int num) { dcon.Open(); if (num == 1) { query = "gb_insert"; Db_Parameters(true); dcon.ExecuteNon(query); } else if (num == 2) { query = "total_count"; total_Count = dcon.GetCheck(query); } else if (num == 3) { ds = dcon.GetDataSet(query); } else if (num == 4) { query = "gb_password"; Db_Parameters(false); Count = dcon.GetCheck(query); if (Count != 0) { dcon.Comm.Parameters.RemoveAt(0); query = "gb_Delete"; dcon.ExecuteNon(query); } } dcon.Close(); } |
bclass.Procedure(1); 이 코드에서 보이듯 메스드에 int형식의 인자값을 받는 것을 알수 있습니다. 위 코드에서 보면 받은 인자값으로 query를 구분합니다.그럼 대충 제일 위에 코드부터 하나하나 살펴 보도록 하겠습니다. 코드 위 부분에 dbClass를 인스턴트로 생성하는 코드가 있습니다. dbClass에서는 데이터베이스 연결하고 실행하는 코드들을 정의한 Class입니다. 위 코드를 하나하나 보시면서 그때그때 dbClass 내용을 설명해 드리도록 하겠습니다. 먼저 dcon.Open();라는 코드가 선언 되어 있습니다. 그 코는 아래와 같습니다.
|
dbClass.cs |
|
private public void Open() { Conn.Open(); } |
전역변수로 SqlConnection을 선언하고 Open이라는 메소드에서 Connection 연결정보를 정의했습니다. 사용자 정보는 Web.config 에 정의해 놓았습니다.(아래 코드 참고)
|
Web.config 페이지 |
|
- Web.config 파일에 정의 - <appSettings> <add key="constr" value="server=(local);database=test;user id=kdw;password=kdw"/> </appSettings> |
그리고 SqlConnection의 Open메소드를 이용해서 데이터베이스와 연결을 했습니다. 자~그럼 아까 인자값을 1로 받았습니다. 그럼 1과 같은 조건에 걸리겠네요! 걸린 코드를 보니 일단 query라는 전역 변수에 "gb_insert"라는 저장프로시저명을 정의하고 있습니다. gb_insert의 내용은 아래코드와 같습니다.
|
gb_insert Procedure |
|
CREATE proc gb_insert ( @b_name varchar(20), @b_pass varchar(20), @b_content varchar(5000), @b_ip varchar(15), @b_icon varchar(20) ) as insert into guest_board (b_name,b_pass,b_content,b_ip,b_icon) values(@b_name,@b_pass,@b_content,@b_ip,@b_icon) GO |
|
boardClass.cs페이지 |
|
public void Db_Parameters(bool X) { dcon.Comm.Parameters.Add("@b_pass", SqlDbType.VarChar, 20); dcon.Comm.Parameters["@b_pass"].Value = U_Pass; if (X) { dcon.Comm.Parameters.Add("@b_name", SqlDbType.VarChar, 20); dcon.Comm.Parameters.Add("@b_content", SqlDbType.VarChar, 5000); dcon.Comm.Parameters.Add("@b_ip", SqlDbType.VarChar, 15); dcon.Comm.Parameters.Add("@b_icon", SqlDbType.VarChar, 20); dcon.Comm.Parameters["@b_name"].Value = U_Name; dcon.Comm.Parameters["@b_content"].Value = U_Content; dcon.Comm.Parameters["@b_ip"].Value = U_Ip; dcon.Comm.Parameters["@b_icon"].Value = ICon; } else { dcon.Comm.Parameters.Add("@b_seq", SqlDbType.Int); dcon.Comm.Parameters["@b_seq"].Value = seq; } } |
받은 인자 값으로 조건을 확인하고 있습니다. 여기서 조건을 사용한 목적은 insert할 것인지비밀번호를 확인 후 삭제를 할 것인지를 확인해서 그에 맞는 Parameter를 만들기 위함 입니다. 아까 ture로 값이 넘어 왔었지요! 그럼 기본적으로 b_pass의 parameter를 만들고b_name,b_content,b_ip,b_icon 이렇게 추가로 더 만들어 습니다.(값도 다 넣어 주었지요) 그럼 이제 실행 시키면 데이터가 데이터베이스에 넘어 가겠지요. 그 다음 코드가 바로 값을 넘겨주는 코드라고 보시면 되겠습니다.^^ "dcon.ExecuteNon(query)" 이 코드 또한 dbClass에 정의된 내용 입니다. 아래 코드로 보시겠습니다.
|
dbClass.cs페이지 |
|
public SqlCommand Comm = new SqlCommand(); public void ExecuteNon(string procedure) { Comm.Connection = Comm.CommandText = procedure; Comm.CommandType = CommandType.StoredProcedure; Comm.ExecuteNonQuery(); } |
SqlCommand를 전역으로 선언해 두었습니다. 그리고 ExeuteNon은 인자 값으로 string형의 값을 받습니다. 그 값은 SQL Query일 것이다. 생성한 Command에 Connection 객체를 생성하고 CommanText에 해당 Query를 설정하고 그 Type를 설정한뒤에 ExecuteNonQuery를 실행하면 입력한 내용이 데이터 베이스에 기록이 되게 됩니다~! 그럼 이제 마지막 줄에 있는 코드를 보도록 하겠습니다.조건들 마지막부분에 dcon.Close() 가 있습니다. 딱 아시겠지요!! 데이터 베이스를 넘겼으니깐 더 이상 데이터베이스와 연결할 필요가 없겠지요!그래서 끊도록 합니다. dcon.Close() 코드 또한 dbClass란걸 알수 있을 것입니다. 그럼 해당 코드에 코드내용을 보도록 하겠습니다. 모 보시지 않으셔도 대충 짐작하실것 같네요!^^;;;
|
dbClass.cs페이지 |
|
public void Close() { Comm.Parameters.Clear(); Conn.Close(); } |
자 위코드로 인해 데이터 베이스 연결이 끊겼습니다. 그럼 계속해서 이벤트 단에 있는 나머지 코드를 살펴 보도록 하겠습니다. Text_Clear() 메소드는 글을 입력 받는 TextBox에 남아있는 글을 지우는 메소드입니다. 코드는 아래와 같습니다.
|
Guest_Board.aspx.cs페이지 |
|
protected void Text_Clear() { txtContent.Text = ""; txtuserName.Text = ""; IMG_ICON.Value = ""; } |
딱 아실수 있으시겠지요!!그럼 이제 하나만은 코드를 보도록 하시지요!! ListBind() 메소드는 리스트부분에 새로작성한 글이 업데이트 될 수 있도록 합니다.이번 내용은 여기까지 작성하도록 하겠습니다. ListBing() 메소드는 리스트부분을 다룰때 자세하게 다루겠습니다. 테스트 하실때는 ListBind()부분은 주석처리해서 데이터 베이스 연결해서 데이터가 입력 되었는지 확인해 보도록 하십시오~^^









