'2009/04'에 해당되는 글 7건

  1. 2009/04/30 회원가입폼 - Ajax 연동 - Javascript 연동
  2. 2009/04/30 팝업창에서 부모창으로 값보내기
  3. 2009/04/30 Cross-Page PostBackUrl 처리를 통한 페이지간 form 데이터 전송
  4. 2009/04/24 [MSSQL] exec 구문 사용시 특수 문자의 변경이 필요하다.
  5. 2009/04/24 [MSSQL] sp_executesql 사용법. (1)
  6. 2009/04/15 [MS-SQL] A 테이블에 B의 내용 중에서 일부 컬럼만 추가 하는 쿼리
  7. 2009/04/09 Entity 의 Transparency 처리 하기
2009/04/30 14:11

회원가입폼 - Ajax 연동 - Javascript 연동


-- Join.aspx--
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Join.aspx.cs" Inherits="AjaxTest.Join" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <style type="text/css">
        body{ font-size:10pt; font-family:돋움;}
        .panel{position:fixed; float:right;}
    </style>
    <script type="text/javascript" language="javascript">
        var xmlHttp;
       
        function createXMLHttpRequest()
        {
            if (window.ActiveXObject)
            {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
            }
            else if (window.XMLHttpRequest)
            {
                xmlHttp = new XMLHttpRequest();
            }
        }
       
        function idCheck()
        {
            var id = document.getElementById("txtId").value;
            var hid = document.getElementById("HiddenField1");
            createXMLHttpRequest();
            xmlHttp.open("get", "id_check.aspx?id=" + id, false);
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlHttp.send(null);
            if (xmlHttp.readyState == 4) //받을 문자가 있을떄
            {
                if (xmlHttp.status == 200) //정상적으로 받았을때
                {
                    var returnvalue = xmlHttp.responseText;  // 받는 문
                    if(returnvalue == "0")
                    {
                        alert('사용가능합니다.');
                        hid.value = 1;   //1번 퀴즈의 닶                        
                    }
                    else
                    {
                        alert('존재하는 아이디 입니다.');
                        id = "";
                    }
                }
                else
                {
                    alert('error..');
                }
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <td>이름</td>
                    <td>
                        <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>주민등록번호</td>
                    <td>
                        <asp:TextBox ID="txtRegNo1" runat="server"></asp:TextBox>-<asp:TextBox ID="txtRegNo2" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>ID</td>
                    <td>
                        <asp:TextBox ID="txtId" runat="server"></asp:TextBox>
                        <input type="button" value="중복확인" onclick="idCheck()" />
                    </td>
                </tr>
                <tr>
                    <td>비밀번호</td>
                    <td>
                        <asp:TextBox ID="txtPwd1" runat="server" TextMode="Password"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>비밀번호확인</td>
                    <td>
                        <asp:TextBox ID="txtPwd2" runat="server" TextMode="Password"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>주소</td>
                    <td>
                        <asp:TextBox ID="txtAddr1" runat="server" Width="237px"></asp:TextBox>
                        <asp:Button ID="btnAddr" runat="server" Text="주소찾기" />
                    </td>
                </tr>
                <tr>
                    <td>상세주소</td>
                    <td>
                        <asp:TextBox ID="txtAddr2" runat="server" Width="316px"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>우편번호</td>
                    <td>
                        <asp:TextBox ID="txtZip1" runat="server" Width="49px"></asp:TextBox>
                        -
                        <asp:TextBox ID="txtZip2" runat="server" Width="49px"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>전화번호</td>
                    <td>
                        <asp:TextBox ID="txtPhone1" runat="server" Width="49px"></asp:TextBox>
                        -&nbsp;
                        <asp:TextBox ID="txtPhone2" runat="server" Width="49px"></asp:TextBox>
                        -
                        <asp:TextBox ID="txtPhone3" runat="server" Width="49px"></asp:TextBox>&nbsp;
                    </td>
                </tr>
                <tr>
                    <td>핸드폰</td>
                    <td>
                        <asp:TextBox ID="txtCell1" runat="server" Width="49px"></asp:TextBox>
                        -
                        <asp:TextBox ID="txtCell2" runat="server" Width="49px"></asp:TextBox>
                        -
                        <asp:TextBox ID="txtCell3" runat="server" Width="49px"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>이메일</td>
                    <td>
                        <asp:TextBox ID="txtEmail" runat="server" Width="249px"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>메일 수신여부</td>
                    <td>수신하시겠습니까?<asp:CheckBoxList ID="CKYN" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow" >
                        <asp:ListItem Text="YES" Value="1"></asp:ListItem>
                        <asp:ListItem Text="NO" Value="0"></asp:ListItem>
                        </asp:CheckBoxList>
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <asp:Button ID="btnJoin" runat="server" Text="가입하기" OnClick="btnJoin_Click" />
                    </td>
                </tr>
            </table>
        </div>
        <div id="eee" style="display:none;">
            <p style="color:Red; font-weight:bold;" id="sssss">중복아이디 확인을 해주세요.</p>
        </div>
        <asp:HiddenField ID="HiddenField1" runat="server" Value="0" />
    </form>
</body>
</html>

-- Join.aspx.cs--
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

namespace AjaxTest
{
    public partial class Join : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnJoin_Click(object sender, EventArgs e)
        {
            if (Request.Form["HiddenField1"].ToString() == "1")
            {
                string strSql = "exec UserJoin ";
                strSql += "'" + txtId.Text + "','" + txtPwd1.Text + "','" + txtName.Text + "'," + txtRegNo1.Text;
                strSql += "," + txtRegNo2.Text + ",'" + txtAddr1.Text + "','" + txtAddr2.Text + "'," + txtZip1.Text;
                strSql += "," + txtZip2.Text + "," + txtPhone1.Text + "," + txtPhone2.Text + "," + txtPhone3.Text;
                strSql += "," + txtCell1.Text + "," + txtCell2.Text + "," + txtCell3.Text + ",'" + txtEmail.Text + "'," + CKYN.SelectedValue.ToString();

                SqlConnection objCon = new SqlConnection(Connected());
                SqlCommand objCmd = new SqlCommand(strSql, objCon);
                objCon.Open();
                objCmd.ExecuteNonQuery();
                objCon.Close();
            }
            else
            {
                String csname1 = "IDCHECK";
                Type cstype = this.GetType();
                ClientScriptManager cs = Page.ClientScript;

                if (!cs.IsStartupScriptRegistered(cstype, csname1))
                {
                    String cstext1 = "document.getElementById('eee').style.display = '';";
                    cs.RegisterStartupScript(cstype, csname1, cstext1, true);
                }
            }
        }

        public string Connected()
        {
            ConnectionStringSettings settings;
            settings = System.Configuration.ConfigurationManager.ConnectionStrings["tomochanwebConnectionString"];
            string connectionString = settings.ConnectionString;
            return connectionString;
        }
    }
}

-- id_check.aspx--
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="id_check.aspx.cs" Inherits="AjaxTest.id_check" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
    </form>
</body>
</html>

-- id_hceck.aspx.cs--
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

namespace AjaxTest
{
    public partial class id_check : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //리턴할 값을 넣을 변수 선언
            string strRturn = "0";
            //쿼리스트링 값 받는 변수 선언 및 할당
            string strID = Request.QueryString["id"].ToString();
            // 아이디 체크를 위한 쿼리
            string strSql = "SELECT Count(*) FROM user_info where uid = '" + strID + "'";
            //콘넥션 개체 생성
            SqlConnection objCon = new SqlConnection(Connected());
            SqlCommand objCmd = new SqlCommand(strSql, objCon);
            objCon.Open();
            SqlDataReader reader = objCmd.ExecuteReader();
            while (reader.Read())
            {
                //데이터 리드를 통한 쿼리값을 받음
                strRturn = reader[0].ToString();
            }
            reader.Close();
            objCon.Close();

            // utf-8로 인코딩하여 join.aspx페이지에 strRturn값을 보내줌.
            Response.ContentType = "UTF-8";
            Response.Write(strRturn);
            Response.Flush();
            Response.End();
        }
       
        public string Connected()
        {
            ConnectionStringSettings settings;
            settings = System.Configuration.ConfigurationManager.ConnectionStrings["tomochanwebConnectionString"];
            string connectionString = settings.ConnectionString;
            return connectionString;
        }
    }
}

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009/04/30 12:07

팝업창에서 부모창으로 값보내기


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function child() {
            window.open("Default2.aspx");
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Text1" type="text" />
        <div>
            <input id="Button1" type="button" value="button" onclick="child()" />
        </div>
    </div>
    </form>
</body>
</html>
 
그리고 자식창 소스... Default2.aspx
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function test() {
            var ctbox = document.getElementById("Text1");
            var ptbox = parent.opener.document.getElementById("Text1");
            ptbox.value = ctbox.value;
            window.close();            
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Text1" type="text" />     
       
    </div>
    <div>
        <input id="Button1" type="button"
            value="button" onclick="test()" />
        </div>
    </form>
</body>
</html>
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009/04/30 11:32

Cross-Page PostBackUrl 처리를 통한 페이지간 form 데이터 전송


asp.net을 하면서 폼간의 데이터 전송에 있어서 asp, php와 다르게 form 에 post만 해서는 안되는걸 알았다.

Request.Form 이걸 사용해서 값은 가져 오지만. 값이 넘어 오질 않았다.
그래서 확인해본 결과 "PostBackUrl 을 사용해야 했다.

아래의 그림에서와 같이 해당 페이지를 이동시키는 객체인 버튼의 속성에서 PostBackUrl에 이동하는
웹 페이지 링크를 설정해 주면 form 데이터가 전달되게 됩니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009/04/24 16:23

[MSSQL] exec 구문 사용시 특수 문자의 변경이 필요하다.


게시판을 생성하다 보면 게시물의 내용에 특수문자가 들어 가게 되는데
그것 자체가 쿼리 문의 실패를 가져 오게 된다.

그래서 쿼리문 자체에서 치환을 해주는 형태로 진행하고,
웹에서 데이터를 가져온 다음에 변환해 주는 것으로 작업을 마무리 해봤다.

--DB에서 값을 변환하는 구문
USE [MarineX]
GO
/****** 개체:  StoredProcedure [dbo].[sp_ReplyInsert]    스크립트 날짜: 04/24/2009 14:55:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_ReplyInsert]
(
 @TableName varchar(100),
 @Name varchar(25),
 @Email varchar(100),
 @Title varchar(150),
 @PostIP varchar(15),
 @Content varchar(1000),
 @Password varchar(20),
 @Encoding varchar(10),
 @Homepage varchar(100),
 @Ref varchar(10),
 @Step varchar(10),
 @RefOrder varchar(10)
)
AS
 SET NOCOUNT OFF;
 declare @sql varchar(500)
 set @sql= 'INSERT INTO ' + @TableName +
 '([Name], [Email], [Title], [PostIP], [Content], [Password], [Encoding], [Homepage], [Ref], [Step], [RefOrder]) ' +
 'VALUES ( ''' +
  @Name+''', '''+
  @Email+''', '''+
  @Title+''', '''+
  @PostIP+''', '''+
  REPLACE(@Content, char(39), '%#39;')+''', '''+
  @Password+''', '''+
  @Encoding+''', '''+
  @Homepage+''', '''+
  @Ref+''', '''+
  @Step+''', '''+
  @RefOrder+ ''' )';
 exec(@sql)

웹에서는 반대로 진행한다.
if (list[0].Encoding == ReplyBoard.EncodingType.Text)
{
    tmpContent =
        list[0].Content.ToString().Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\r\n", "<br>").Replace("%#39;", "'");
}

우선 이렇게 해서 다른 문제점이 생기는지 파악해 보자.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009/04/24 01:30

[MSSQL] sp_executesql 사용법.


asp.net 을 하면서 게시판을 제작하다 보면
정말 초보자 수준에서 보게 되면, 게시판 같은 경우
같은 테이블을 사용해야 하는 상황이 생기는데, 이런 경우 저장 프로시저를 각 테이블 별로
제작 하게 되면 작업사항도 번거로워 지는걸 발견해서
저장 프로시저를 동적 테이블을 구성해 볼려고 했다.

쩝.. 세상 프로그램은 쉬운게 없더라..

가장 쉽게 저장 프로시저를 구성하면 아래와 같아 진다.
ALTER PROCEDURE [dbo].[sp_ReplyListNum]
(
 @Num int
)
AS
 SET NOCOUNT ON;
 SELECT * FROM dbo.Reply Where Num=@Num

이런 경우에 쉽게 생각 하면 dbo.@TableName 이런 식의 표현이 가능할 줄 알았다.
하지만 이렇게 할 경우 허용이 되지 않는 것을 발견하였다.

그래서 이런 경우 exec()를 사용해서 해당 테이블을 만든 다음에 적용해야 한다.
declare @sql varchar(200)
set @sql='Select * From Reply Where ' + @strSearchField + ' Like ''%' + @strSearchQuery + '%'' Order By Num Desc';
exec(@sql)

하지만 이렇게 했을때 결과는 제대로 나오지만 asp.net에서 데이터 셋을 연동하게 되면
제대로 표현이 안되는 경우가 있다.

하나의 예를 보면..
ALTER PROCEDURE [dbo].[sp_ReplyListNum]
(
 @Num int
)
AS
 SET NOCOUNT ON;
 SELECT * FROM dbo.Reply Where Num=@Num

순수하게 위의 코드를 수행하게 되면  * 부분에서 Reply 의 모든 컬럼을 리턴 시킨다.
그래서 데이터 셋에 서버탐색기를 통해서 저장 프로시저를 드래그앤 드롭을 하게 되면
아래와 같은 내용으로 적용이 된다.

이런 식의 테이블과 테이블 어뎁트가 같이 구성이 된다.

하지만 문제는 exec()를 실행하게 되면 결과는 int 형태로만 나오기 때문에,
테이블 형태로 받아야 할때가 필요 하게 되더라
그래서 찾아보다 보니 sp_executesql 이게 필요하다는 것을 알게 되었다.

아래 부분은 해당 쿼리를 보내고 나서, 보낸 내용중에서 필요한 컬럼만 리턴해 보기 위한 쿼리 내용입니다.
ALTER PROCEDURE [dbo].[sp_ReplyList]
 @TableName varchar(100)
AS
 SET NOCOUNT ON;
 declare @sql nvarchar(2000)
 declare @v_Num int
 declare @v_Name varchar(25)
 declare @v_Email varchar(100)
 declare @v_Title varchar(150)
 declare @v_PostDate datetime
 declare @v_PostIP varchar(15)
 declare @v_Content varchar(1000)
 declare @v_Password varchar(20)
 declare @v_ReadCount int
 declare @v_Encoding varchar(10)
 declare @v_Homepage varchar(100)
 declare @v_ModifyDate datetime
 declare @v_ModifyIP varchar(15)
 declare @v_Ref int
 declare @v_Step int
 declare @v_RefOrder int
 set @sql='Select @v_Num=Num, @v_Name=Name, @v_Email=Email, @v_Title=Title, @v_PostDate=PostDate, @v_PostIP=PostIP, @v_Content=Content, @v_Password=Password, @v_ReadCount=ReadCount, @v_Encoding=Encoding, @v_Homepage=Homepage, @v_ModifyDate=ModifyDate, @v_ModifyIP=ModifyIP, @v_Ref=Ref, @v_Step=Step, @v_RefOrder=RefOrder From ' + @TableName + ' Order by Num Desc'
 --exec(@sql)
 exec sp_executesql
  @sql,
  N'@v_Num int out, @v_Name varchar(25) out,
  @v_Email varchar(100) out, @v_Title varchar(150) out, @v_PostDate datetime out,
  @v_PostIP varchar(15) out, @v_Content text out, @v_Password varchar(20) out,
  @v_ReadCount int out, @v_encoding varchar(10) out, @v_Homepage varchar(100) out,
  @v_ModifyDate datetime out, @v_ModifyIP varchar(15) out,
  @v_Ref int out, @v_Step int out, @v_RefOrder int out',
  @v_Num out,
  @v_Name out,
  @v_Email out,
  @v_Title out,
  @v_PostDate out,
  @v_PostIP out,
  @v_Content out,
  @v_Password out,
  @v_ReadCount out,
  @v_Encoding out,
  @v_Homepage out,
  @v_ModifyDate out,
  @v_ModifyIP out,
  @v_Ref out,
  @v_Step out,
  @v_RefOrder out
-- 위에서 수행한 정보를 select를 통해서 리턴 시켜야 한다.
 select @v_Num as Num,
   @v_Name as Name,
   @v_Email as Email,
   @v_Title as Title,
   @v_PostDate as PostDate,
   @v_PostIP as PostIP,
   @v_Content as Content,
   @v_Password as Password,
   @v_Readcount as ReadCount,
   @v_Encoding as Encoding,
   @v_Homepage as Homepage,
   @v_ModifyDate as ModifyDate,
   @v_ModifyIP as ModifyIP,
   @v_Ref as Ref,
   @v_Step as Step,
   @v_RefOrder as RefOrder
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1
2009/04/15 14:39

[MS-SQL] A 테이블에 B의 내용 중에서 일부 컬럼만 추가 하는 쿼리

A의 테이블에 idx라는 자동증가 컬럼이 있다고 한다면
모든 컬럼 내용을 다 복사 하지는 못한다.
그래서 아래와 같이 추가할 컬럼을 지정한 후에 복사를 해야 한다.

INSERT INTO userList
           ([uid]
           ,[passwd]
           ,[name]
           ,[phone]
           ,[email]
           ,[jumin1]
           ,[jumin2]
           ,[zipcode1]
           ,[zipcode2]
           ,[address1]
           ,[address2]
           ,[regdate]
           ,[level]
           ,[exp]
           ,[cash]
           ,[gem]
           ,[IsBlocked]
           ,[IsGameUser]
           ,[gameScore]
           ,[gameCash]
           ,[grade])
select a.uid, a.passwd, a.name, a.phone, a.email,
  a.jumin1, a.jumin2, a.zipcode1, a.zipcode2, a.address1, a.address2,
  a.regdate, a.level, a.exp, a.cash, a.gem, a.IsBlocked, a.IsGameUser,
  a.gameScore, a.gameCash, a.grade

from leave_userList a
where idx=3
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009/04/09 01:04

Entity 의 Transparency 처리 하기


해당 Entity를 투명 처리를 원해서 찾다 보니 아래의 주소에 있는 소스를 이용하게 되었다.

http://www.ogre3d.org/wiki/index.php/Per_renderable_transparency#MaterialInstance.h

여기에서 받아 보면 6개의 헤더 및 소스 파일이 존재 했다.
Entity를 생성한 후에 받아서 투명, 블랜딩, 메트리얼 처리가 가능해 진다.
좋은 소스인듯...
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0