ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 06. 답변형게시판도 만들자 - 공통클래스 작성
    .NET/ASP.NET 2009. 2. 6. 13:30
    반응형






    난이도 :  (조금씩 어려워져요 ^^)

     

    답변형게시판도 만들자 - 공통클래스 작성 

    우선, 답변형 게시판을 위해서 App_Code 폴더에,

    K-23.jpg 

    Library.cs  와 Multiboard.cs를 만든다.

     

    아래는 Multiboard.cs의 소스코드이다.

    1.    11 using System.Data.SqlClient;

         12 

         13 public class Multiboard

         14 {

         15     // 게시물리스트에 사용하는 메서드 DataSet을 돌려준다.

         16     public static DataSet SelectContent(string keyword, string value)

         17     {

         18         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

         19         string mainQry = string.Empty, opQry = string.Empty;

         20         string orQry = string.Empty;

         21 

         22         opQry = "WHERE " + keyword + " LIKE '%" + value +  "%' ";

         23         orQry = "ORDER BY Refer DESC, Step ASC ";

         24         mainQry = "SELECT " +

         25                 "BoardId, Writer, Title, Step, Depth, " +

         26                 "ReadCount, RegDate, DelFlag " +

         27                 "FROM t_MultiBoard " + opQry + orQry;

         28 

         29         SqlCommand Cmd = new SqlCommand(mainQry, Conn);

         30         SqlDataAdapter Adapt = new SqlDataAdapter(Cmd);

         31         DataSet Ds = new DataSet();

         32         Adapt.Fill(Ds, "t_MultiBoard");

         33 

         34         return Ds;

         35     }

         36 

         37     // 게시물 상세보기 메서드

         38     public static DataSet GetContent(string boardId)

         39     {

         40         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

         41         string sqlSelQry = "SELECT " +

         42             "Title, Writer, RegDate, ReadCount, Content " +

         43             "FROM t_MultiBoard " +

         44             "WHERE BoardId = @BoardID ";

         45         SqlCommand Cmd = new SqlCommand(sqlSelQry, Conn);

         46         Cmd.Parameters.Add("@BoardID"SqlDbType.Int).Value = Int32.Parse(boardId);

         47         SqlDataAdapter Adapt = new SqlDataAdapter(Cmd);

         48         DataSet Ds = new DataSet();

         49         Adapt.Fill(Ds, "t_MultiBoard");

         50         return Ds;

         51     }

         52 

         53     // 게시물 조회수 증가 메서드

         54     public static void IncreaseReadCount(string boardId)

         55     {

         56         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

         57         string strUpQry = "UPDATE t_MultiBoard SET " +

         58                         "ReadCount = ReadCount + 1 " +

         59                         "WHERE BoardId = @BoardID ";

         60         SqlCommand Cmd = new SqlCommand(strUpQry, Conn);

         61         Cmd.Parameters.Add("@BoardID"SqlDbType.Int).Value = Int32.Parse(boardId);

         62         Conn.Open();

         63         Cmd.ExecuteNonQuery();

         64         Conn.Close();

         65     }

         66 

         67     // 작성자와 동일인인가를 확인하는 메서드

         68     public static bool IsWriter(string boardId, string userId)

         69     {

         70         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

         71         String strCntQry = "SELECT COUNT(*) AS cnt " +

         72                     "FROM t_MultiBoard " +

         73                     "WHERE BoardID = @BoardID " +

         74                     "AND Writer = @Writer ";

         75         SqlCommand Cmd = new SqlCommand(strCntQry, Conn);

         76         Cmd.Parameters.Add("@BoardID"SqlDbType.Int).Value = boardId;

         77         Cmd.Parameters.Add("@Writer"SqlDbType.NVarChar).Value = userId;

         78         Conn.Open();

         79         SqlDataReader Read = Cmd.ExecuteReader();

         80         int iCnt = 0;

         81         if (Read.Read())

         82             iCnt = Convert.ToInt32(Read["cnt"]);

         83         Read.Close();

         84         Conn.Close();

         85 

         86         if (iCnt >= 1) return true;

         87         else return false;

         88     }

         89 

         90     // 게시물 작성 메서드

         91     public static void InsertContent(string writer, string title, string content)

         92     {

         93         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

         94         string strInsQry = "INSERT INTO t_MultiBoard " +

         95             "(Writer, Title, Content, " +

         96             "Refer, Step, Depth, " +

         97             "ReadCount, DelFlag, RegDate) " +

         98             "VALUES " +

         99             "(@Writer, @Title, @Content, " +

        100             "" + GetNewRef() + ", 0, 0, " +

        101             "0, 'N', GetDate()) ";

        102         SqlCommand Cmd = new SqlCommand(strInsQry, Conn);

        103         Cmd.Parameters.Add("@Writer"SqlDbType.NVarChar).Value = writer;

        104         Cmd.Parameters.Add("@Title"SqlDbType.NVarChar).Value = title;

        105         Cmd.Parameters.Add("@Content"SqlDbType.NText).Value = content;

        106         Conn.Open();

        107         Cmd.ExecuteNonQuery();

        108         Conn.Close();

        109     }

        110 

        111     private static string GetNewRef()

        112     {

        113         string strVal = string.Empty;

        114         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        115         string strSelQry = "SELECT ISNULL(MAX(Refer), 0) + 1 AS MaxRef " +

        116             "FROM t_MultiBoard ";

        117         SqlCommand Cmd = new SqlCommand(strSelQry, Conn);

        118         Conn.Open();

        119         SqlDataReader Read = Cmd.ExecuteReader();

        120         if (Read.Read())

        121         {

        122             strVal = Read["MaxRef"].ToString();

        123         }

        124         Read.Close();

        125         Conn.Close();

        126 

        127         return strVal;

        128     }

        129 

        130     // 게시물 수정 메서드

        131     public static void UpdateContent(string boardId, string title, string content)

        132     {

        133         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        134         string strUpQry = "UPDATE t_MultiBoard SET " +

        135                     "Title = @Title, " +

        136                     "Content = @Content " +

        137                     "WHERE BoardId = @BoardId ";

        138         SqlCommand Cmd = new SqlCommand(strUpQry, Conn);

        139         Cmd.Parameters.Add("@Title"SqlDbType.NVarChar).Value = title;

        140         Cmd.Parameters.Add("@Content"SqlDbType.NText).Value = content;

        141         Cmd.Parameters.Add("@BoardId"SqlDbType.Int).Value = Convert.ToInt32(boardId);

        142 

        143         Conn.Open();

        144         Cmd.ExecuteNonQuery();

        145         Conn.Close();

        146     }

        147 

        148     // 답견게시물 삭제 메서드

        149     public static void DeleteContent(string boardId)

        150     {

        151         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        152         // Refer, Step, Depth를 다 읽어온다.

        153         string strSelQry = "SELECT Refer, Step, Depth " +

        154                     "FROM t_MultiBoard " +

        155                     "WHERE BoardId = @BoardId ";

        156         SqlCommand Cmd = new SqlCommand(strSelQry, Conn);

        157         Cmd.Parameters.Add("@BoardId"SqlDbType.Int).Value = Int32.Parse(boardId);

        158 

        159         Conn.Open();

        160         int refer = 0, step = 0, depth = 0;

        161         SqlDataReader Read = Cmd.ExecuteReader();

        162         if (Read.Read())

        163         {

        164             refer = Convert.ToInt32(Read["Refer"]);

        165             step = Convert.ToInt32(Read["Step"]);

        166             depth = Convert.ToInt32(Read["depth"]);

        167         }

        168         Read.Close();

        169         // 내글을 삭제 및 내 하위의 글들 삭제

        170         string strUpQry = "UPDATE t_MultiBoard SET " +

        171                 "Delflag = 'Y' " +

        172                 "WHERE BoardId = @BoardId; " +

        173                 "UPDATE t_MultiBoard SET " +

        174                 "Delflag = 'Y' " +

        175                 "WHERE Refer = @Refer " +

        176                 "AND Step > @Step " +

        177                 "AND Depth > @Depth ";

        178         Cmd.CommandText = strUpQry;

        179         Cmd.Parameters.Clear();

        180         Cmd.Parameters.Add("@BoardId"SqlDbType.Int).Value = Int32.Parse(boardId);

        181         Cmd.Parameters.Add("@Refer"SqlDbType.Int).Value = refer;

        182         Cmd.Parameters.Add("@Step"SqlDbType.Int).Value = step;

        183         Cmd.Parameters.Add("@Depth"SqlDbType.Int).Value = depth;

        184         Cmd.ExecuteNonQuery();       

        185         Conn.Close();

        186     }

        187 

        188     // 게시물 답변 메서드

        189     public static void ReplyContent(string boardId, string writer, string title, string content) {

        190         SqlConnection Conn = newSqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        191         int refer = 0, step = 0, depth = 0;

        192         // Refer, Step, Depth를 다 읽어온다.

        193         string strSelQry = "SELECT Refer, Step, Depth " +

        194                     "FROM t_MultiBoard " +

        195                     "WHERE BoardId = @BoardId ";

        196         SqlCommand Cmd = new SqlCommand(strSelQry, Conn);

        197         Cmd.Parameters.Add("@BoardId"SqlDbType.Int).Value = Int32.Parse(boardId);

        198 

        199         Conn.Open();

        200         SqlDataReader Read = Cmd.ExecuteReader();

        201         if (Read.Read())

        202         {

        203             refer = Convert.ToInt32(Read["Refer"]);

        204             step = Convert.ToInt32(Read["Step"]);

        205             depth = Convert.ToInt32(Read["depth"]);

        206         }

        207         Read.Close();

        208         // 동일한 Refer를 가지는 게시물중 원본게시물 Step보다 큰 Step을 가지는 애들은 Step을 1씩 증가시킴.

        209         string strUpQry = "UPDATE t_MultiBoard SET " +

        210                     "Step = Step + 1 " +

        211                     "WHERE Refer = @Refer " +

        212                     "AND Step > @Step ";

        213         Cmd.CommandText = strUpQry;

        214         Cmd.Parameters.Clear();

        215         Cmd.Parameters.Add("@Refer"SqlDbType.Int).Value = refer;

        216         Cmd.Parameters.Add("@Step"SqlDbType.Int).Value = step;

        217         Cmd.ExecuteNonQuery();

        218         // 답변게시물저장

        219         string strInsQry = "INSERT INTO t_MultiBoard " +

        220                     "(Writer, Title, Content, " +

        221                     "Refer, Step, Depth, " +

        222                     "ReadCount, DelFlag, RegDate) " +

        223                     "VALUES " +

        224                     "(@Writer, @Title, @Content, " +

        225                     "@Refer, @Step, @Depth, " +

        226                     "0, 'N', GetDate()) ";

        227         Cmd.CommandText = strInsQry;

        228         Cmd.Parameters.Clear();

        229         Cmd.Parameters.Add("@Writer"SqlDbType.NVarChar).Value = writer;

        230         Cmd.Parameters.Add("@Title"SqlDbType.NVarChar).Value = title;

        231         Cmd.Parameters.Add("@Content"SqlDbType.NText).Value = content;

        232         Cmd.Parameters.Add("@Refer"SqlDbType.Int).Value = refer;

        233         Cmd.Parameters.Add("@Step"SqlDbType.Int).Value = (step + 1);

        234         Cmd.Parameters.Add("@Depth"SqlDbType.Int).Value = (depth + 1);

        235         Cmd.ExecuteNonQuery();

        236         Conn.Close();

        237     }

        238 

        239     public static bool IsReply(string step)

        240     {

        241         if (step != "0"return true;

        242         else return false;

        243     }

        244 

        245     public static string GetDepth(int depth)

        246     {

        247         string r = string.Empty;

        248         for (int i = 0; i < depth; i++)

        249             r += "&nbsp;&nbsp;&nbsp;";

        250         return r;

        251     }

        252 

        253     public static string GenTitle(string boardId, string title, string delFlag)

        254     {

        255         if (delFlag == "N")

        256             return "<a href='MultiBoard_View.aspx?BoardID=" + boardId + "'>" + title + "</a>";

        257         else

        258             return "글이 삭제되었습니다";

        259     }

        260 }

     

    꽤나 많은 소스를 다 적었다. 우선 다음으로 Library.cs 소스코드이다. 공통라이브러리는 메시지창이나 메시지창 후 페이지 이동하는 웹 사이트 어디에서나 쓸 수 있는 공통메서드들을 모아둔 클래스이다. 또한 static으로 작성하여 인스턴스를 생성할 필요도 없이 바로 사용할 수 있다.

    1.    11 public class Library

         12 {

         13     public static void Alert(HttpResponse response, String msg)

         14     {

         15         String script = "<script type='text/javascript'>alert('" +

         16             msg + "');</script>";

         17         response.Write(script); 

         18     }

         19 

         20     public static void Alert(HttpResponse response, String msg, String strUrl)

         21     {

         22         String script = "<script type='text/javascript'>alert('" +

         23             msg + "');location.href='" + strUrl + "';</script>";

         24         response.Write(script);

         25     }

         26 

         27     public static string SubstrTitle(string title, int size)

         28     {

         29         return title.Length > size ? title.Substring(0, size) + "..." : title;

         30     }

         31 

         32     public static string ConvertDateWithHyphen(string date)

         33     {

         34         return date.Substring(0, 4) + "-" + date.Substring(4, 2) + "-" + date.Substring(6, 2);

         35     }

         36 }

     

     

    Last edited on Feb 03, 2009 18:22 by 페르소나95

    반응형

    댓글

Designed by Tistory.