회원 관리
2011. 7. 10. 01:46
반응형
login.aspx.cs
public partial class login : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand cmdSelect; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string strsql = "select * from tblmemo"; // tblmemo 테이블의 모든 정보 선택
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // DB의 message 데이터베이스 연결
cmdSelect = new SqlCommand(strsql, conn); //message DB가 갖고 있는 테이블 중에서 tblmemo를 선택한다.
adapter = new SqlDataAdapter(); // SQL DB를 업데이트하는 데 사용할 데이터 명령 집합과 DB 연결
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결해 줌
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"];
DataRow[] row = table.Select("user_id = '" + TextBox1.Text + "'"); //아이디 체크: userid와 textbox1의 내용을 비교한다.
if (row.Length > 0) //row의 길이가 0보다 크면 아이디가 존재하는 것.
if (row[0]["pass"].ToString() == TextBox2.Text.ToString()) // TextBox2에 입력한 문자열과 실제 Password를 비교, 길이가 0 보다 크면 로그인 OK.
{
Session["uid"] = row[0]["user_id"]; // user_id 를 Session의 ["uid"]에 저장.
Response.Redirect("user.aspx"); // 로그인 되면 user.aspx에 이동.(여기서 Session["id"]를 활용)
}
else // TextBox2에 입력한 문자열과 실제 Password를 비교, 길이가 0 이하면 로그인 실패
{
Response.Write("<script>alert('비밀번호가 일치하지 않습니다');</script>");
TextBox2.Focus(); // TextBox2에 캐럿 위치
}
else // row의 길이가 0이기 때문에 아이디가 존재하지 않음.
{
Response.Write("<script>alert('존재하지 않는 아이디입니다');</script>");
TextBox1.Text = ""; // 아이디 텍스트박스(TextBox1) 초기화
TextBox1.Focus(); // TextBox1에 캐럿 위치
}
}
protected void Button2_Click(object sender, EventArgs e) // 입력 박스 초기화
{
TextBox1.Text = "";
TextBox2.Text = "";
}
}
user.aspx.cs
public partial class user : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["uid"].ToString() == "") // 로그인 페이지를 거치지 않아 세션의 uid 정보에 아무 값이 없다.
Response.Write("<script>alert('로그인 한 후 페이지를 볼 수 있습니다.');location.href='login.aspx';</script>"); // 로그인하지 않았기 때문에 더 진행하지 않고 경고창을 띄운 뒤 다시 login.aspx 페이지로 보낸다.
else
{
string str = "select * from tblmemo"; // tblmemo 테이블의 모든 정보 선택
SqlConnection conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); //DB의 message 데이터베이스 연결
SqlCommand comm = new SqlCommand(str, conn); // message DB가 갖고 있는 테이블 중에서 tblmemo를 선택한다.
SqlDataAdapter adapter = new SqlDataAdapter(); // SQL DB를 업데이트하는 데 사용할 데이터 명령 집합과 DB 연결
adapter.SelectCommand = comm; // 위에 있는 comm와 연결해 줌
DataSet dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"];
DataRow[] row = table.Select("user_id='" + Session["uid"] + "'"); //아이디 체크: userid와 Session["uid"]의 내용을 비교한다.
Response.Write("<center><h1>로그인 성공</h1><p>" + Session["uid"] + "님 반갑습니다.</p><hr><p>"); //Session["uid"]는 사용자 이름.
if ((int)row[0]["msg_count"] > 0) // 받은 메시지의 수에 따라 메시지를 다르게 표시.
{ // 새 메시지가 있을 때
Response.Write(row[0]["msg_count"] + "개의 메세지가 도착하였습니다.</p><br /><br /><br />");
}
else // 새 메시지가 없을 때
{
Response.Write("받은 메모함에 <strong>새 메시지가 없습니다</strong>. (ㅜ_ㅜ)</p><br /><br />");
}
Response.Write("<p>[<a href=mod.aspx>회원 정보 수정</a>]</p>");
Response.Write("<p>[<a href=del.aspx>회원 탈퇴</a>]</p>");
Response.Write("<p>[<a href=memo_write.aspx>메모보내기</a>]</p>");
if ((int)row[0]["msg_count"] > 0) // 메시지가 있으면 메시지 세부 내용도 표시
{
Response.Write("<p>[<a href=memo_list.aspx>리스트 보기</a>]</p>");
}
Response.Write("<p>[<a href=main.aspx>로그아웃</a>]</p>");
}
}
}
mod.aspx.cs
public partial class mod : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand comm, cmdSelect, cmdUpdate; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e) // 페이지 로드
{
if (!Page.IsPostBack) // 페이지가
{
string strsql = "select * from tblmemo"; // tblmemo 테이블 선택
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // DB의 message 데이터베이스 연결
comm = new SqlCommand(strsql, conn); // message DB가 갖고 있는 테이블 중에서 tblmemo를 선택한다.
adapter = new SqlDataAdapter(); //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = comm; // 위에 있는 comm과 연결해 줌
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id='" + Session["uid"] + "'"); //아이디 체크: userid와 Session["uid"]의 내용을 비교한다.
// 텍스트박스에 기본적으로 사용자 정보를 입력.
TextBox1.Text = row[0]["user_name"].ToString();
TextBox2.Text = row[0]["user_id"].ToString();
TextBox3.Text = row[0]["pass"].ToString();
TextBox4.Text = row[0]["address"].ToString();
TextBox5.Text = row[0]["phone"].ToString();
TextBox6.Text = row[0]["e_mail"].ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // DB의 message 데이터베이스 연결
string str = "select * from tblmemo"; // tblmemo 테이블 선택
cmdSelect = new SqlCommand(str, conn); // message DB가 갖고 있는 테이블 중에서 tblmemo를 선택한다.
string str1 = "update tblmemo set pass=@pass, user_name=@user_name, address=@address, phone=@phone, e_mail=@e_mail";
// tblmemo를 업데이트 하기 위해 pass, user_name 등의 칼럼의 별칭을 붙인다.
str1 += " where user_id='" + Session["uid"] + "'"; // Session["uid"]의 값과 user_id를 비교해서 일치하는 것을 찾는다.
cmdUpdate = new SqlCommand(str1, conn); // message 데이터베이스 중에 위의 조건(str1)에 일치하는 것을 업데이트한다.
cmdUpdate.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar, 50, "pass")); // 칼럼명과 일치하는 자료형 정의
cmdUpdate.Parameters.Add(new SqlParameter("@user_name", SqlDbType.VarChar, 50, "user_name"));
cmdUpdate.Parameters.Add(new SqlParameter("@address", SqlDbType.VarChar, 50, "address"));
cmdUpdate.Parameters.Add(new SqlParameter("@phone", SqlDbType.VarChar, 50, "phone"));
cmdUpdate.Parameters.Add(new SqlParameter("@e_mail", SqlDbType.VarChar, 50, "e_mail"));
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.UpdateCommand = cmdUpdate; // 위에 있는 cmdUpdate와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id='" + Session["uid"] + "'"); //아이디 체크: userid와 Session["uid"]의 내용을 비교한다.
// 텍스트박스에 입력한 값을 row의 요소에 저장한다.
row[0]["pass"] = TextBox3.Text;
row[0]["user_name"] = TextBox1.Text;
row[0]["address"] = TextBox4.Text;
row[0]["phone"] = TextBox5.Text;
row[0]["e_mail"] = TextBox6.Text;
adapter.Update(dataset, "tblmemo"); // 실제 DB에 업데이트 되도록 하는 구문이 바로 이 부분.
Response.Write("<script>alert('개인정보가 성공적으로 수정되었습니다.');</script>"); // 사용자에게 변경 사항을 알림창을 통해 알려준다.
}
protected void Button2_Click1(object sender, EventArgs e) // 취소 버튼을 누를 때
{
Response.Redirect("user.aspx");
}
}
del.aspx.cs
public partial class del : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand comm, cmdSelect, cmdDelete; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 선택
cmdSelect = new SqlCommand("select * from tblmemo", conn); // tblmemo 테이블 선택(conn으로 명명)
string str = "delete from tblmemo where user_id=@user_id"; // 테이블의 user_id와 별칭 user_id가 같은 것을 삭제
cmdDelete = new SqlCommand(str, conn); // 위의 조건(테이블)과 데이터베이스를 연결시킨다.
cmdDelete.Parameters.Add(new SqlParameter("@user_id", SqlDbType.VarChar, 50, "user_id")); // 칼럼명과 일치하는 자료형 정의
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.DeleteCommand = cmdDelete; // 위에 있는 cmdDelete와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id ='" + Session["uid"] + "'"); //아이디 체크: userid와 Session["uid"]의 내용을 비교한다.
row[0].Delete(); // row의 요소를 삭제
adapter.Update(dataset, "tblmemo"); // 이것을 실행해야만 변경된 내용이 원본에 적용된다. 실제 DB 내용이 삭제되도록 하는 구문.
string str1 = "drop table " + Session["uid"]; // Session["uid"]와 일치하는 이름을 가진 테이블 제거(가입시 회원 아이디명으로 별도 생성되었던 테이블)
comm = new SqlCommand(str1, conn); //
conn.Open(); // 데이터베이스 연결 열기
comm.ExecuteNonQuery(); // NonQuery이기 때문에 실행하고 끝남.
conn.Close(); // 데이터베이스 연결 닫음
Response.Write("<center><h4>" + Session["uid"] + "님 그동안 저희 사이트를 애용해 주셔서 감사합니다.</h4>"); //
Response.Write("<p>그럼 즐거운 시간 되세요.</p><hr /><br /><br />");
Response.Write("<p>[<a href=main.aspx>메인페이지</a>]</p></center>");
}
}
memo_write.aspx.cs
public partial class memo_write : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand cmdSelect, cmdUpdate, cmdInsert; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 연결
cmdSelect = new SqlCommand("select * from tblmemo", conn); // tblmemo 테이블 선택
string str = "update tblmemo set msg_count=@msg_count where user_id=@user_id"; // user_id가 일치하는 tblmemo의 msg_count 칼럼 업데이트
cmdUpdate = new SqlCommand(str, conn); // tblmemo 테이블 내용 중에서 str 조건에 맞는 자료 업데이트
cmdUpdate.Parameters.Add(new SqlParameter("@msg_count", SqlDbType.Int, 4, "msg_count")); // 칼럼명과 일치하는 자료형 정의
cmdUpdate.Parameters.Add(new SqlParameter("@user_id", SqlDbType.VarChar, 50, "user_id"));
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.UpdateCommand = cmdUpdate; // cmdUpdate와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id = '" + TextBox1.Text.ToString() + "'"); // 아이디 체크: TextBox1의 내용과 비교
row[0]["msg_count"] = (int)(row[0]["msg_count"]) + 1; // msg_count의 값을 1 증가
adapter.Update(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
// 아이디에 해당하는 테이블에 내용 저장
str = "insert into " + TextBox1.Text.ToString() + "(from_id,subject,msg,msg_date) values(@from_id, @subject, @msg, @msg_date)";
cmdInsert = new SqlCommand(str, conn); // message DB에서 str 조건에 맞는 테이블 선택
cmdInsert.Parameters.Add(new SqlParameter("@from_id", SqlDbType.VarChar, 50, "from_id")); // 칼럼명과 일치하는 자료형 정의
cmdInsert.Parameters.Add(new SqlParameter("@subject", SqlDbType.VarChar, 50, "subject"));
cmdInsert.Parameters.Add(new SqlParameter("@msg", SqlDbType.Text, 500, "msg"));
cmdInsert.Parameters.Add(new SqlParameter("@msg_date", SqlDbType.VarChar, 50, "msg_date"));
cmdSelect = new SqlCommand("select * from " + TextBox1.Text, conn); // 아이디에 해당하는 테이블 선택
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.InsertCommand = cmdInsert; // 위에 있는 cmdInsert와 연결
adapter.Fill(dataset, "imsi"); // dataset을 imsi로 채운다.
DataTable table1 = dataset.Tables["imsi"]; // 테이블(메모리에 있는 데이터)에 imsi dataset을 넣는다.
DataRow row1 = table1.NewRow(); // row1테이블의 새 자료 추가
row1["from_id"] = Session["uid"]; // Session["uid"]에 저장된 아이디를 from_id에 저장
row1["subject"] = TextBox2.Text.ToString(); // 제목
row1["msg"] = TextBox3.Text.ToString(); // 메시지 본문
row1["msg_date"] = DateTime.Now; // msg_date에 현재 시간 저장
table1.Rows.Add(row1); // row1에 해당하는 자료 저장
adapter.Update(dataset, "imsi"); // 지금 작업했던 것은 메모리 서버에만 있고 SQL서버에는 작업이 전혀 되지 않았다. 여기서 추가된 내용이 adapter.update를 통해 SQL서버에 추가된다.
Response.Write("<script>alert('메시지가 성공적으로 전달되었습니다.');location.href='user.aspx'</script>"); // 메시지가 제대로 전달되면 알려주고 user.aspx로 이동
}
}
check_id.aspx.cs
public partial class check_id : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand cmdSelect; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e) // 확인 단추를 눌렀을 때
{
Panel1.Visible = false; // Panel1이 보이지 않게 함
string strsql = "select * from tblmemo"; // tblmemo 테이블 선택
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 연결
cmdSelect = new SqlCommand(strsql, conn); // message DB에서 tblmemo 선택
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
string thenname = TextBox1.Text.ToString(); // string 형 thenname 변수에 TextBox1에 입력한 값을 넣는다
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_name = '" + thenname + "'"); // 아이디 체크: thenname의 내용과 비교
if (row.Length > 0) // 아이디가 존재할 때
{
Response.Write("<center<br><br><br><table border=1 width=350>"); // 테이블 생성
Response.Write("<tr height=20><th>이름<th>아이디<th>주소");
for (int i = 0; i < row.Length; i++) // 같은 이름으로 된 자료가 여러 개 있을 수 있으므로 결과 모두 출력
{
Response.Write("<tr height=20 align=center>");
Response.Write("<td>" + row[i]["user_name"] + "<td>" + row[i]["user_id"] + "<td>" + row[i]["address"]);
}
Response.Write("</table>");
}
else // 아이디가 존재하지 않을 때
Response.Write(thenname + "는(은) <br>존재하지 않는 회원입니다.");
}
}
memo_list.aspx.cs
public partial class memo_list : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string str = "select * from " + Session["uid"] + " order by num desc"; // Session["uid"] 와 일치하는 이름을 가진 테이블 중에서, 메시지가 온 순서대로 정렬
SqlConnection conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 연결
SqlCommand comm = new SqlCommand(str, conn); // message DB 중에서 str에서 설정한 조건에 맞는 테이블 선택
SqlDataAdapter adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = comm; // 위에 있는 comm과 연결
DataSet dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "imsi"); // dataset을 imsi로 채운다.(imsi는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["imsi"]; // 테이블(메모리에 있는 데이터)에 imsi dataset을 넣는다.
DataRow[] row = table.Select(); // 위 테이블의 배열을 row에 저장
Response.Write("<center><h2>리스트 보기</h2><hr />"); // 본문 시작
Response.Write("<br /><table border=3 width=550>");
Response.Write("<tr><th>번호<th>보낸이<th>제목<th>받은 날짜</th></tr>");
for (int i = 0; i < row.Length; i++) // 찾아낸 결과 만큼 출력
{
Response.Write("<tr height=20>");
Response.Write("<td width=8% align=center>" + (i + 1) + "<th width=17% align=center>" + row[i]["from_id"]);
// detail_view.aspx 페이지를 호출할 때 ?id 속성에 있는 num을 근거로 한다.(추후 사용자 페이지에 있는 num 속성을 사용할 계획)
Response.Write("<td width=40%><a href=detail_view.aspx?id=" + row[i]["num"] + ">" + row[i]["subject"] + "</a><td width=35%>" + row[i]["msg_date"] + "</tr>");
}
Response.Write("</table><br /><p><a href=user.aspx>사용자 페이지로</a></p>");
}
}
detail_view.aspx.cs
public partial class detail_view : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) // 페이지 로드 이벤트
{
string idstr = Request.QueryString["id"]; // 방금 전 페이지에서 받아 온 num값을 idstr에 저장한다.
string str = "select * from " + Session["uid"]; // Session["uid"] (아이디를 이름으로 갖는 사용자 테이블) 선택
SqlConnection conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 연결
SqlCommand comm = new SqlCommand(str, conn); // message DB 중에서 사용자 테이블 선택
SqlDataAdapter adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = comm; // 위에 있는 comm과 연결
DataSet dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "temp"); // dataset을 temp로 채운다.(temp는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["temp"]; // 테이블(메모리에 있는 데이터)에 temp dataset을 넣는다.
DataRow[] row = table.Select("num = " + idstr); // 메시지를 특정하기 위해 num값을 사용. 일치하는 메모를 불러옴
Response.Write("<center><h2>상세 보기</h2><hr /><br /><br />"); // 본문 시작
Response.Write("<table border=3><tr><th width=15%>보낸이<td>");
Response.Write(row[0]["from_id"] + "<tr><th>제목<td>"); // 보낸이
string cont = row[0]["msg"].ToString(); // 메시지를 string형 변수에 저장
Response.Write(row[0]["subject"] + "<tr><th>내용<td>"); // 제목
Response.Write("<xmp>" + cont + "</xmp></table>"); // 유니코드 표시 위해 <xmp> 태그로 감싸서 메시지 출력
Response.Write("<p align=center>[<a href=reply.aspx?id=" + row[0]["from_id"] + ">답변하기</a>] ");
Response.Write("[<a href=delete.aspx?num=" + row[0]["num"] + ">삭제하기</a>]");
Response.Write("</p><br><br>");
}
}
reply.aspx.cs
public partial class reply : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand cmdSelect, cmdUpdate, cmdInsert; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
string idd = Request.QueryString["id"]; // 방금 전 페이지에서 받아 온 num값을 idstr에 저장한다.
TextBox1.Text = idd;
}
protected void Button1_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message DB 연결
cmdSelect = new SqlCommand("select * from tblmemo", conn); // tblmemo 테이블 선택
string str = "update tblmemo set msg_count=@msg_count where user_id=@user_id"; // user_id가 일치하는 tblmemo의 msg_count 칼럼 업데이트
cmdUpdate = new SqlCommand(str, conn); // tblmemo 테이블 내용 중에서 str 조건에 맞는 자료 업데이트
cmdUpdate.Parameters.Add(new SqlParameter("@msg_count", SqlDbType.Int, 4, "msg_count")); // 칼럼명과 일치하는 자료형 정의
cmdUpdate.Parameters.Add(new SqlParameter("@user_id", SqlDbType.VarChar, 50, "user_id"));
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.UpdateCommand = cmdUpdate; // cmdUpdate와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id = '" + TextBox1.Text.ToString() + "'"); // 아이디 체크: TextBox1의 내용과 비교
row[0]["msg_count"] = (int)(row[0]["msg_count"]) + 1; // msg_count의 값을 1 증가
adapter.Update(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
// 아이디에 해당하는 테이블에 내용 저장
str = "insert into " + TextBox1.Text.ToString() + "(from_id,subject,msg,msg_date) values(@from_id, @subject, @msg, @msg_date)";
cmdInsert = new SqlCommand(str, conn); // message DB에서 str 조건에 맞는 테이블 선택
cmdInsert.Parameters.Add(new SqlParameter("@from_id", SqlDbType.VarChar, 50, "from_id")); // 칼럼명과 일치하는 자료형 정의
cmdInsert.Parameters.Add(new SqlParameter("@subject", SqlDbType.VarChar, 50, "subject"));
cmdInsert.Parameters.Add(new SqlParameter("@msg", SqlDbType.Text, 500, "msg"));
cmdInsert.Parameters.Add(new SqlParameter("@msg_date", SqlDbType.VarChar, 50, "msg_date"));
cmdSelect = new SqlCommand("select * from " + TextBox1.Text, conn); // 아이디에 해당하는 테이블 선택
adapter.SelectCommand = cmdSelect; // 위에 있는 cmdSelect와 연결
adapter.InsertCommand = cmdInsert; // 위에 있는 cmdInsert와 연결
adapter.Fill(dataset, "imsi"); // dataset을 imsi로 채운다.
DataTable table1 = dataset.Tables["imsi"]; // 테이블(메모리에 있는 데이터)에 imsi dataset을 넣는다.
DataRow row1 = table1.NewRow(); // row1테이블의 새 자료 추가
row1["from_id"] = Session["uid"]; // Session["uid"]에 저장된 아이디를 from_id에 저장
row1["subject"] = TextBox2.Text.ToString(); // 제목
row1["msg"] = TextBox3.Text.ToString(); // 메시지 본문
row1["msg_date"] = DateTime.Now; // msg_date에 현재 시간 저장
table1.Rows.Add(row1); // row1에 해당하는 자료 저장
adapter.Update(dataset, "imsi"); // 지금 작업했던 것은 메모리 서버에만 있고 SQL서버에는 작업이 전혀 되지 않았다. 여기서 추가된 내용이 adapter.update를 통해 SQL서버에 추가된다.
Response.Write("<script>alert('메시지가 성공적으로 전달되었습니다.');location.href='user.aspx'</script>"); // 메시지가 제대로 전달되면 알려주고 user.aspx로 이동
}
protected void Button2_Click(object sender, EventArgs e)
{
}
delete.aspx.cs
public partial class delete : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand cmdselect, cmddelete, cmdselect1, cmdupdate; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e) // 페이지 로드 이벤트
{
if (!Page.IsPostBack)
{
conn = new SqlConnection("server=(local);database=message;uid=sa;pwd=romantic;"); // message DB 연결
string temp = Request.QueryString["num"]; // 이전 페이지에서 num 값을 가져와서 저장
string str = "delete from " + Session["uid"].ToString() + " where num=@num"; // 사용자 테이블(Session["uid"] 정보 활용)에서 num값을 가진 자료 삭제
string selectstr = "select * from tblmemo"; // tblmemo 테이블 선택
string updatestr = "update tblmemo set msg_count=@msg_c where user_id='" + Session["uid"].ToString() + "'"; // tblmemo 테이블에서 사용자 이름에 해당하는 msg_count 자료의 값을 업데이트
cmdselect = new SqlCommand("select * from " + Session["uid"].ToString(), conn); // 사용자 테이블(Session["uid"] 정보 활용)
cmddelete = new SqlCommand(str, conn); // message DB에서 사용자 테이블 선택
cmdselect1 = new SqlCommand(selectstr, conn); // message DB에서 tblmemo 테이블 선택
cmdupdate = new SqlCommand(updatestr, conn); // message DB에서 tblmemo 테이블의 사용자 이름에 해당하는 msg_count 자료의 값을 업데이트
cmddelete.Parameters.Add(new SqlParameter("@num", SqlDbType.VarChar, 50, "num")); // 칼럼에 알맞은 자료형 정의
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = cmdselect; // 위에 있는 cmdSelect와 연결
adapter.DeleteCommand = cmddelete; // 위에 있는 cmdDelete와 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, Session["uid"].ToString()); // dataset을 채운다.
DataTable table = dataset.Tables[Session["uid"].ToString()]; // 테이블(메모리에 있는 데이터)에 dataset을 넣는다.
DataRow[] row1 = table.Select("num='" + temp + "'"); // 이전 페이지에서 num 값을 가져와서 테이블의 값과 일치하는 것을 선택
row1[0].Delete(); // row1의 요소를 삭제
adapter.Update(dataset, Session["uid"].ToString()); // 변경한 내용을 실제 원본에 적용
adapter.SelectCommand = cmdselect1; // cmdselect1와 연결
adapter.Fill(dataset, "tblmemo"); // dataset을 채운다.
adapter.UpdateCommand = cmdupdate; // cmdupdate와 연결
cmdupdate.Parameters.Add(new SqlParameter("@msg_c", SqlDbType.Int, 4, "msg_count")); // 칼럼에 알맞은 자료형 정의
table = dataset.Tables["tblmemo"]; // table(메모리에 있는 자료)에 tblmemo를 넣는다
DataRow[] row = table.Select("user_id='" + Session["uid"].ToString() + "'"); // user_id가 Session["uid"]와 일치하는 테이블 선택해서 row에 저장
row[0]["msg_count"] = Int32.Parse(row[0]["msg_count"].ToString()) - 1; // row의 자료 중 msg_count의 값을 1 감소
adapter.Update(dataset, "tblmemo"); // 실제 DB에 반영
Response.Write("<script>alert('메세지가 삭제되었습니다.');location.href='memo_list.aspx';</script>"); // 삭제 사실을 알리고 memo_list.aspx로 리턴
}
}
}
registrer.aspx.cs
public partial class register : System.Web.UI.Page
{
SqlConnection conn; // SQL 데이터베이스 연결용
SqlCommand comm, cmdInsert; // SQL 서버에 대해 실행할 문장
SqlDataAdapter adapter; //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
DataSet dataset; // 메모리 내의 데이터 캐시
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e) // 회원 가입 버튼을 눌렀을 때
{
if (TextBox2.Text.ToString() == "") // 아이디 란에 입력한 문자가 없으면
Response.Write("<script>alert('아이디 중복체크를 확인하세요.');</script>");
else
{
string strsql = "select * from tblmemo"; // tblmemo 테이블 선택
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic"); // message 데이터베이스 연결
comm = new SqlCommand(strsql, conn); // message DB 중에서 tblmemo 선택
adapter = new SqlDataAdapter(); //DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = comm; // 위에 있는 comm과 연결해 줌
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // 같은 테이블이다. 전체를 갖다 얹음. 원본 데이터와 연결 끊어도 상관없는 비연결 기반.
DataTable table = dataset.Tables["tblmemo"]; // 여러 개의 dataset중 tblmemo 지칭
DataRow[] row = table.Select("user_id = '" + TextBox2.Text.ToString() + "'"); // user_id가 같은 것이 있는지 검색. row도 쉽게 풀어쓰면 table이다. 여기서 row라고 함은 0개 또는 1개 이상의 행을 가질 수 있다.
if (row.Length > 0) // 같은 행이 한 개 이상 있다면 사용중인 아이디가 된다.
{
Response.Write("<script>alert('이미 사용중인 아이디입니다')</script>"); //알림 창을 통해 사용중인 아이디가 있다는 것을 알림
TextBox2.Focus(); // 캐럿이 TextBox2에서 깜빡이게 함.
}
else // 같은 행이 없다면 사용 가능하다.
Response.Write("<script>alert('사용 가능한 아이디입니다')</script>"); // 알림 창에 나타나는 메시지
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string sqlstr = "select * from tblmemo"; // tblmemo 테이블 선택
conn = new SqlConnection("server=localhost;database=message;uid=sa;pwd=romantic;"); // message DB 연결
comm = new SqlCommand(sqlstr, conn); // message DB에서 tblmemo 선택
adapter = new SqlDataAdapter(); // DataSet을 채우고 DB를 업데이트 할 데이터 명령을 저장
adapter.SelectCommand = comm; // 위에 있는 comm과 연결
dataset = new DataSet(); // dataset이라고 하는 DataSet(메모리 안의 DB 캐시) 생성
adapter.Fill(dataset, "tblmemo"); // dataset을 tblmemo로 채운다.(tblmemo는 어떤 이름이어도 상관없음)
DataTable table = dataset.Tables["tblmemo"]; // 테이블(메모리에 있는 데이터)에 tblmemo dataset을 넣는다.
DataRow[] row = table.Select("user_id = '" + TextBox2.Text.ToString() + "'"); //아이디 체크: userid와 TextBox2의 내용을 비교한다.
if (row.Length > 0) // id 확인을 누르지 않은 사람을 위해 다시 검사.
{
Response.Write("<script>alert('이미 등록된 아이디입니다')</script>"); // 경고 창을 통해 이미 등록된 사용자라는 것을 알려줌
TextBox2.Text = "";
}
else
{
// tblmemo의 user_id, pass 등의 값을 대입하기 위해 각각 별칭을 생성
string strsql = "insert into tblmemo(user_id,pass,user_name,address,phone,e_mail,msg_count) values (@user_id,@pass,@user_name,@address,@phone,@email,@msg_count)";
cmdInsert = new SqlCommand(strsql, conn); // message 데이터베이스에서 strsql을 실행한다.(tblmemo에 값 입력)
adapter.InsertCommand = cmdInsert; //위에 있는 cmdInsert와 연결
// 칼럼명과 일치하는 자료형 정의
cmdInsert.Parameters.Add(new SqlParameter("@user_id", SqlDbType.VarChar, 50, "user_id"));
cmdInsert.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar, 50, "pass"));
cmdInsert.Parameters.Add(new SqlParameter("@user_name", SqlDbType.VarChar, 50, "user_name"));
cmdInsert.Parameters.Add(new SqlParameter("@address", SqlDbType.VarChar, 50, "address"));
cmdInsert.Parameters.Add(new SqlParameter("@phone", SqlDbType.VarChar, 50, "phone"));
cmdInsert.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 50, "e_mail"));
cmdInsert.Parameters.Add(new SqlParameter("@msg_count", SqlDbType.Int, 4, "msg_count"));
DataRow row1 = table.NewRow(); // row1 테이블의 새 자료 추가
row1["user_id"] = TextBox2.Text.ToString(); // 텍스트박스에 입력한 내용을 저장(user_id)
row1["pass"] = TextBox3.Text.ToString(); // password
row1["user_name"] = TextBox1.Text.ToString(); // 사용자명
row1["address"] = TextBox4.Text.ToString(); // 주소
row1["phone"] = TextBox5.Text.ToString(); // 전화
row1["e_mail"] = TextBox6.Text.ToString(); // 이메일
row1["msg_count"] = 0; // 받은 메시지(msg_count)는 0으로 초기화
table.Rows.Add(row1); // row1에 해당하는 자료 추가
adapter.Update(dataset, "tblmemo"); // 지금 작업했던 것은 메모리 서버에만 있고 SQL서버에는 작업이 전혀 되지 않았다. 여기서 추가된 내용이 adapter.update를 통해 SQL서버에 추가된다.
string str1 = "create table " + TextBox2.Text.ToString(); // 테이블 이름은 아이디(textbox2)를 그대로 사용
str1 += " ( num int identity(1,1) primary key,"; // 1부터 시작해 1씩 증가.(PK)
str1 += "from_id varchar(50) not null,"; // 칼럼 명 및 속성 정의
str1 += "subject varchar(50) not null,";
str1 += "msg varchar(500),";
str1 += "msg_date varchar(50) not null)";
conn.Open(); // 데이터베이스 연결 열기
comm.CommandText = str1; // str1에 해당하는
comm.ExecuteNonQuery(); // 비연결기반. ExecuteReader도 마찬가지.
conn.Close(); // 데이터베이스 연결 닫기
Response.Redirect("main.aspx"); // 작업이 끝나면 main 페이지로 돌아온다.
}
}
}
반응형
'프로그래밍 실습 > ASP' 카테고리의 다른 글
| 성적 관리: 비연결 기반 (0) | 2011.07.10 |
|---|
