정리

3월 16일 유효성 검사 연습

디벨로프로 2020. 3. 16. 14:10
반응형

aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CRUD.WebForm1" EnableEventValidation="false" %>


<!--/ 페이지 지시문 -->
<!DOCTYPE html>


<!-- 스크립트가 있다면 내부 로직을 처리하는 부분임 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>

    <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }

        .header_name {
            margin: 10px;
            width: 60px;
            text-align: right;
            font-size: 12px;
            font-weight: 600;
        }

        .test_textbox {
            width: 120px;
            height: 20px;
            margin: 2px;
            font-size: 1px;
            position: relative;
            top: 2px;
            border-radius: 4px;
        }

        .test_dropDownList {
            width: 120px;
            height: 20px;
            margin: 2px;
            font-size: 13px;
            position: relative;
            top: 2px;
            border-radius: 4px;
        }


        #buttons {
            position: relative;
            left: 322px;
        }

        .centered {
            position: relative;
            left: 50%;
            transform: translateX(-50%);
        }

        .btn_op {
            height: 25px;
        }
    </style>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>






    <form id="form1" runat="server">

        <%--스크립트매니저--%>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
        </asp:ScriptManager>


        <div class="container">

            <label class="header_name">사번</label>
            <asp:TextBox CssClass="test_textbox" ID="사번" runat="server" ReadOnly="true"></asp:TextBox>


            <div class="row">
                <div class="col-4">
                    <label class="header_name">성명</label>
                    <asp:TextBox CssClass="test_textbox" ID="성명" runat="server"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="체크_성명" runat="server"
                        ControlToValidate="성명" ErrorMessage="성명을 정확히 입력해야합니다."
                        ValidationExpression="^[기-힣]{1,4}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator>
                </div>


                <div class="col-4">
                    <label class="header_name">주민번호</label>

                    <asp:TextBox CssClass="test_textbox" ID="주민번호앞" runat="server" Style="width: 45px;" />
                    <label>-</label>
                    <asp:TextBox CssClass="test_textbox" ID="주민번호뒤" runat="server" Style="width: 55px;" />

                    <asp:RegularExpressionValidator ID="체크_주민_앞" runat="server"
                        ControlToValidate="주민번호앞" ErrorMessage="주민등록번호 앞자리 입력 오류"
                        ValidationExpression="^[0-9]{6}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator>

                    <asp:RegularExpressionValidator ID="체크_주민_뒤" runat="server"
                        ControlToValidate="주민번호뒤" ErrorMessage="주민등록번호 뒷자리 입력 오류"
                        ValidationExpression="^[0-9]{7}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator>

                    <asp:ValidationSummary ID="validationSummary" runat="server" ValidationGroup="jumin" />
                </div>

            </div>


            <div class="row">
                <div class="col-4">
                    <label class="header_name">이메일 </label>
                    <asp:TextBox CssClass="test_textbox" ID="이메일" runat="server"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="체크_이메일" runat="server"
                        ControlToValidate="이메일" ErrorMessage="올바른 이메일 형식이 아닙니다."
                        ValidationExpression="^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" Font-Size="10px"></asp:RegularExpressionValidator>
                </div>
                <div class="col-4">
                    <label class="header_name">전화번호 </label>
                    <asp:TextBox CssClass="test_textbox" ID="전화번호" runat="server"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="체크_전화번호" runat="server"
                        ControlToValidate="전화번호" ErrorMessage="올바른 전화번호 형식이 아닙니다."
                        ValidationExpression="^[0-9]+$" Font-Size="10px"></asp:RegularExpressionValidator>
                </div>

            </div>
            <div class="row">
                <div class="col-8">
                    <label class="header_name">주소</label>
                    <asp:TextBox CssClass="test_textbox" ID="우편번호" runat="server"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="우편번호_체크" runat="server"
                        ControlToValidate="우편번호" ErrorMessage="우편번호 형식 오류"
                        ValidationExpression="^[0-9]{5,6}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator>
                    <asp:TextBox CssClass="test_textbox" Style="margin-left: 10px; width: 238px;" ID="주소" runat="server"></asp:TextBox>
                </div>
            </div>
            <div class="row">
                <div class="col-4">
                    <label class="header_name">부서 </label>
                    <asp:DropDownList CssClass="test_dropDownList" ID="부서" runat="server">
                        <asp:ListItem Text="--선택--" Value="none" />
                        <asp:ListItem Text="경영관리부" Value="경영관리부" />
                        <asp:ListItem Text="개발1팀" Value="개발1팀" />
                        <asp:ListItem Text="개발2팀" Value="개발2팀" />
                        <asp:ListItem Text="개발3팀" Value="개발3팀" />
                        <asp:ListItem Text="개발4팀" Value="개발4팀" />
                        <asp:ListItem Text="디자인팀" Value="디자인팀" />
                        <asp:ListItem Text="영업팀" Value="영업팀" />
                        <asp:ListItem Text="유지보수팀" Value="유지보수팀" />
                    </asp:DropDownList>

                    <%--  <asp:RequiredFieldValidator ID="체크_부서" Text="&lt;br/&gt;부서 입력 오류" InitialValue="none" ControlToValidate="부서" runat="server" Font-Size="10px" />--%>
                </div>
                <div class="col-4">
                    <label class="header_name">직위 </label>

                    <asp:DropDownList CssClass="test_dropDownList" ID="직위" runat="server">
                        <asp:ListItem Text="--선택--" Value="none" />
                        <asp:ListItem Text="대표이사" Value="대표이사" />
                        <asp:ListItem Text="상무" Value="상무" />
                        <asp:ListItem Text="이사" Value="이사" />
                        <asp:ListItem Text="부장" Value="부장" />
                        <asp:ListItem Text="차장" Value="차장" />
                        <asp:ListItem Text="과장" Value="과장" />
                        <asp:ListItem Text="대리" Value="대리" />
                        <asp:ListItem Text="사원" Value="사원" />
                        <asp:ListItem Text="인턴" Value="인턴" />

                    </asp:DropDownList>
                    <%-- <asp:RequiredFieldValidator ID="체크_직위" Text="&lt;br/&gt;직위 입력 오류" InitialValue="none" ControlToValidate="부서" runat="server" Font-Size="10px" />--%>
                </div>
            </div>
        </div>

        <div id="buttons" class="container">
            <asp:Button ID="버튼_테스트" class="btn btn-primary btn_op" runat="server" Text="테스트" OnClientClick="ScriptManagerTest()" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button>
            <asp:Button class="btn btn-primary btn_op" runat="server" Text="신규" OnClick="버튼_신규" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button>
            <asp:Button class="btn btn-success btn_op" runat="server" Text="저장" OnClick="버튼_저장" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button>
            <asp:Button class="btn btn-danger btn_op" runat="server" Text="삭제" OnClick="버튼_삭제" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button>
        </div>
        <script type="text/javascript">

            function ScriptManagerTest() {
                alert(PageMethods.HelloWorld());

            };

            
            

        </script>



        <%--그리드뷰--%>
        <div class="container pt-3 my-3">
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Width="484px" CellPadding="4" ForeColor="#333333" GridLines="None" Height="190px" OnRowCommand="GridView1_RowCommand">
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                <Columns>
                    <%--<asp:BoundField DataField="사번" HeaderText="사번" InsertVisible="False" ReadOnly="True" SortExpression="사번" ItemStyle-Width="50">
                                <ItemStyle Width="50px"></ItemStyle>
                            </asp:BoundField>--%>
                    <asp:TemplateField HeaderText="사번" ValidateRequestMode="Disabled">
                        <ItemTemplate>
                            <asp:LinkButton runat="server" CommandName="ITEM" CommandArgument='<%# Eval("사번") %>'><%# Eval("사번") %></asp:LinkButton>

                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="성명" HeaderText="성명" SortExpression="성명" />
                    <asp:BoundField DataField="주민번호" HeaderText="주민번호" SortExpression="주민번호" />
                    <asp:BoundField DataField="부서" HeaderText="부서" SortExpression="부서" />
                    <asp:BoundField DataField="직위" HeaderText="직위" SortExpression="직위" />
                </Columns>
                <EditRowStyle BackColor="#999999" />
                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                <SortedAscendingCellStyle BackColor="#E9E7E2" />
                <SortedAscendingHeaderStyle BackColor="#506C8C" />
                <SortedDescendingCellStyle BackColor="#FFFDF8" />
                <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TEST_LJHConnectionString %>" SelectCommand="SELECT [사번], [성명], [주민번호], [부서], [직위] FROM [회원관리]"></asp:SqlDataSource>
        </div>
        <%--그리드뷰--%>
    </form>


    <script type="text/javascript">
        $(document).ready(function () {
            $('#<%= 버튼_테스트.ClientID %>').on('click', function () {
                
            });
        });
    </script>
</body>
</html>

 

aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data;
using System.Web.Services;
//웹 폼 작성시 주로 사용되는 기본적인 네임스페이스 -> 웹 폼 생성 시 자동으로 선언됨

namespace CRUD
{


    public partial class WebForm1 : System.Web.UI.Page //파일이름의 클래스로 선언됨
    {

        //전역변수 시작 ------------------------------------------------------

        //DB 연결 주소
        string source = @"Server=192.168.10.155;" +
                         "uid=test_idino;" +
                         "pwd=idino@12;" +
                         "database=TEST_LJH";
        string 선택된사번;
        string 주민번호;
        String sql;

        //----------------------------------------------------------전역변수 끝

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

            }
        }




        //데이터 출력하기 - SELECT 
        protected void 버튼_출력(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(source);
            sql = "SELECT * FROM 회원관리";

            try
            {
                // DB연결
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);


                // 커서기능? 데이터를 읽기위한 리더 생성
                SqlDataReader reader = cmd.ExecuteReader();

                //데이터 출력이 정상적으로 되는지 테스트하기 위한 테이블 생성
                Response.Write("<Table border=1>");

                //데이터 읽기 -> 테이블에 데이터 입력
                while (reader.Read())
                {
                    Response.Write("<tr>");
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        Response.Write("<td>" + reader[i] + "</td>");
                    }
                    Response.Write("</tr>");
                }

                Response.Write("</table>");


                reader.Close();

            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
            finally
            {
                //DB 연결 해제
                conn.Close();
                GridView1.DataBind();
            }
        }//End Of Method : Output_Test

        // 값 초기화
        protected void 버튼_신규(object sender, EventArgs e)
        {

            사번.Text = "";
            성명.Text = "";
            주민번호앞.Text = "";
            주민번호뒤.Text = "";
            이메일.Text = "";
            전화번호.Text = "";
            우편번호.Text = "";
            주소.Text = "";
            부서.SelectedIndex = 0;
            직위.SelectedIndex = 0;
        }//End Of Method : Insert_Test




        //데이터 입력 및 수정 (INSERT,UPDATE)
        protected void 버튼_저장(object sender, EventArgs e)
        {
            if (Page.IsValid == true)
            {


                bool _주민_체크 = false;
                bool _주민_체크_앞 = false;
                bool _주민_체크_뒤 = false;
                bool _직위_체크 = false;
                bool _부서_체크 = false;
                bool _성명_체크 = false;

                //성명체크
                if (성명.Text != "")
                {
                    _성명_체크 = true;
                }
                else
                {
                    Response.Write("성명 공백 <br/>");
                }

                if (주민번호앞.Text == "")
                {
                    Response.Write("주민등록 앞번호 공백 <br/>");
                }
                else
                {
                    _주민_체크_앞 = true;
                }//주민등록번호 앞자리 체크


                if (주민번호뒤.Text == "")
                {
                    Response.Write("주민등록 뒷번호 공백 <br/>");
                }
                else
                {
                    _주민_체크_뒤 = true;
                }//주민등록번호 뒷자리 체크

                if(_주민_체크_앞 == true && _주민_체크_뒤 == true)
                {
                    _주민_체크 = true;
                }//주민등록번호 앞자리와 뒷자리가 공백이 아닐 때 _주민_체크 값 true


                //직위체크
                if(직위.SelectedValue != "none")
                {
                    _직위_체크 = true;
                }else
                {
                    Response.Write("직위 선택 안됨 <br/>");
                }


                //부서체크
                if (부서.SelectedValue != "none")
                {
                    _부서_체크 = true;
                }else
                {
                    Response.Write("부서 선택 안됨 <br/>");
                }




                if (_성명_체크 && _주민_체크 && _직위_체크 && _부서_체크 )
                {
                    SqlConnection conn = new SqlConnection(source);
                    if (사번.Text == null || 사번.Text == "")
                    {

                        sql =
                            "INSERT INTO 회원관리 " +
                                       "(성명" +
                                       ",주민번호" +
                                       ",성별" +
                                       ",이메일" +
                                       ",전화번호" +
                                       ",우편번호" +
                                       ",주소" +
                                       ",부서" +
                                       ",직위) " +
                                 "VALUES " +
                                       "(@성명" +
                                       ",@주민번호" +
                                       ",@성별" +
                                       ",@이메일" +
                                       ",@전화번호" +
                                       ",@우편번호" +
                                       ",@주소" +
                                       ",@부서" +
                                       ",@직위)";

                    }
                    else
                    {

                        sql = "UPDATE 회원관리 " +
                                 "SET 성명 = @성명 " +
                                    ",주민번호 = @주민번호 " +
                                    ",성별 = @성별 " +
                                    ",이메일 = @이메일 " +
                                    ",우편번호 = @우편번호 " +
                                    ",전화번호 = @전화번호 " +
                                    ",주소 = @주소 " +
                                    ",부서 = @부서 " +
                                    ",직위 = @직위 " +
                               "WHERE 사번 = @사번";
                    }
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    cmd.Parameters.AddWithValue("@성명", 성명.Text);
                    cmd.Parameters.AddWithValue("@주민번호", 주민번호앞.Text + 주민번호뒤.Text);
                    if (주민번호뒤.Text != "")
                    {
                        cmd.Parameters.AddWithValue("@성별", 주민번호뒤.Text.Substring(0, 1));
                    }
                    cmd.Parameters.AddWithValue("@이메일", 이메일.Text);
                    cmd.Parameters.AddWithValue("@우편번호", 우편번호.Text);
                    cmd.Parameters.AddWithValue("@전화번호", 전화번호.Text);
                    cmd.Parameters.AddWithValue("@주소", 주소.Text);
                    cmd.Parameters.AddWithValue("@부서", 부서.Text);
                    cmd.Parameters.AddWithValue("@직위", 직위.Text);

                    if (사번.Text != null || 사번.Text != "")
                    {
                        cmd.Parameters.AddWithValue("@사번", 사번.Text);
                    }
                    try
                    {

                        conn.Open();
                        cmd.ExecuteNonQuery();


                    }
                    catch (Exception exception)
                    {
                        System.Diagnostics.Trace.WriteLine(exception);
                    }
                    finally
                    {
                        //DB 연결 해제
                        conn.Close();
                        GridView1.DataBind();
                    }
                }
            }
            
        }//End Of Method : Update_Test


        //사번으로 데이터 삭제하기 - DELETE
        protected void 버튼_삭제(object sender, EventArgs e)
        {

            //사번을 기준으로 데이터를 삭제하므로 사번값이 null 이라면 실행 할 필요없음.
            if (사번.Text != null)
            {

                //Connetion 객체 생성 for DB 연결
                SqlConnection conn = new SqlConnection(source);

                // DB와 통신이 이루어지므로 try문 사용
                try
                {

                    // DB에 요청할 쿼리 - 사번으로 데이터 삭제
                    String sql = "DELETE " +
                                   "FROM 회원관리 " +
                                  "WHERE 사번 = @사번";

                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("@사번", 사번.Text);

                    // DB연결, 쿼리수행
                    conn.Open();
                    cmd.ExecuteNonQuery();



                }
                catch (Exception exception)
                {
                    System.Diagnostics.Trace.WriteLine(exception);
                }
                finally
                {
                    conn.Close();
                    GridView1.DataBind();
                }

            }
        }//End Of Method : Delete_Test

        //그리드뷰 로우 셋팅
        //그리드뷰를 선택 가능하도록 설정??
        //protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        //{
        //    if (e.Row.RowType == DataControlRowType.DataRow)
        //    {
        //        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex);
        //        e.Row.Attributes["style"] = "cursor:pointer";
        //    }
        //}
        //End Of Method : GridView1_RowDataBound


        //그리드뷰 이벤트 
        //그리드뷰에서 선택된 로우값의 변화를 감지한 뒤 명령을 실행한다.
        protected void 링크_테스트(object sender, EventArgs e)
        {

            //Connetion 객체 생성 for DB 연결
            SqlConnection conn = new SqlConnection(source);

            //그리드뷰에서 선택된 ROW의 첫번째 셀, 사번을 가지고 온다.
            선택된사번 = GridView1.SelectedRow.Cells[0].Text;
            사번.Text = 선택된사번;

            // DB에 요청할 쿼리
            String sql = "SELECT * FROM 회원관리 WHERE 사번 = " + 선택된사번;

            // DB와 통신이 이루어지므로 try문 사용
            try
            {
                // DB연결, 쿼리수행
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);

                // 커서기능? 데이터를 읽기위한 리더 생성
                SqlDataReader reader = cmd.ExecuteReader();


                //데이터 읽기 -> 입력폼에 읽어들인 데이터 입력
                while (reader.Read())
                {
                    성명.Text = String.Format("{0}", reader["성명"]);
                    주민번호 = String.Format("{0}", reader["주민번호"]);
                    이메일.Text = String.Format("{0}", reader["이메일"]);
                    우편번호.Text = String.Format("{0}", reader["우편번호"]);
                    주소.Text = String.Format("{0}", reader["주소"]);
                    전화번호.Text = String.Format("{0}", reader["전화번호"]);
                    부서.SelectedValue = String.Format("{0}", reader["부서"]);
                    직위.SelectedValue = String.Format("{0}", reader["직위"]);
                }

                //주민등록번호 앞뒤 나눠서 입력
                주민번호앞.Text = 주민번호.Substring(0, 6);
                주민번호뒤.Text = 주민번호.Substring(6);

                //리더 종료
                reader.Close();

            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
            finally
            {
                //DB 연결 해제
                conn.Close();
            }
        }//End Of Method : GridView1_SelectedIndexChanged

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if(e.CommandName == "ITEM")
            {
                //Connetion 객체 생성 for DB 연결
                SqlConnection conn = new SqlConnection(source);

                //그리드뷰에서 선택된 ROW의 첫번째 셀, 사번을 가지고 온다.
                선택된사번 = e.CommandArgument.ToString();
                사번.Text = 선택된사번;

                // DB에 요청할 쿼리
                String sql = "SELECT * FROM 회원관리 WHERE 사번 = " + 선택된사번;

                // DB와 통신이 이루어지므로 try문 사용
                try
                {
                    // DB연결, 쿼리수행
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    // 커서기능? 데이터를 읽기위한 리더 생성
                    SqlDataReader reader = cmd.ExecuteReader();


                    //데이터 읽기 -> 입력폼에 읽어들인 데이터 입력
                    while (reader.Read())
                    {
                        성명.Text = String.Format("{0}", reader["성명"]);
                        주민번호 = String.Format("{0}", reader["주민번호"]);
                        이메일.Text = String.Format("{0}", reader["이메일"]);
                        우편번호.Text = String.Format("{0}", reader["우편번호"]);
                        주소.Text = String.Format("{0}", reader["주소"]);
                        전화번호.Text = String.Format("{0}", reader["전화번호"]);
                        부서.SelectedValue = String.Format("{0}", reader["부서"]);
                        직위.SelectedValue = String.Format("{0}", reader["직위"]);
                    }

                    //주민등록번호 앞뒤 나눠서 입력
                    주민번호앞.Text = 주민번호.Substring(0, 6);
                    주민번호뒤.Text = 주민번호.Substring(6);

                    //리더 종료
                    reader.Close();

                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                }
                finally
                {
                    //DB 연결 해제
                    conn.Close();
                }
            }
        }

        //테스트 코드 자바스크립트 -> C# 함수호출 
        [WebMethod]
        public static string HelloWorld()
        {
            return "hello";
        }

        public void 버튼_테스트(object sender, GridViewEditEventArgs e)
        {

        }
       


    }//End Of Class : WebForm1
}

 

페이지에서 유효성 검사를 하고 필수 항목은 서버단에서 체크를 하도록 만들었음

다음 목표 --> 페이지에서 스크립트를 생성하여  유효성 검사를 마치고 서버로 접근하도록 변경하기

'정리' 카테고리의 다른 글

ASP.NET - MSSQL 연동 (with Web.Config)  (0) 2020.03.17
ASP.NET에서 JavaScript로 C# 함수 호출하기  (0) 2020.03.16
GRIDVIEW.DataBind()  (0) 2020.03.12
이메일 정규표현식  (0) 2020.03.12
DATABASE 연동 ASP.NET, MS-SQL  (0) 2020.03.11