개요 : 처음으로 c# asp.net을 써야할 일이 생겨서 맛보기로 CRUD 게시판을 만들어보았다.
주의 : 이것저것 공부하면서 막 시도하며 만들다보니 변수명도 클래스명도 코드도 바보같음 주의
의의 : 그러나 점차 기능을 붙여 발전된 형태로 만들며 연습할 것이고 나와 같이 db연결도 못하는 분에게 약간의 도움이라도 되었으면 하는 마음
특징 : 회사 서버로 db연결함 (인터넷엔 로컬db로 연결하는 글이 대부분이라 설정값 찾는데 헤맸다...)
툴 : visualstudio2022 , ssms
게시판 미리보기
프로젝트 asp.net web application 실행
mvc패턴으로 생성
DB연결
나는 두가지 방법으로 해보았다.
1. webConfig에서 connectionStrings으로 db연결
2. cs 파일에서 using문을 사용하여 db연결 (이건 나중에 코드에서)
우선 1번
...
<connectionStrings>
<add name="UserDB" connectionString="Data Source=ip 작성,port 작성;
Initial Catalog=TEST_PROFILE;User ID=sa;Password=123456789"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Connection String 방식
- name : 코드에서 연결될 이름
- Data Source : 서버명
- Initial Catalog : database 이름
- Integrated Security=SSPI : db 서버 접근 인증이 windows 인증 방식인 경우(난 회사 db라 안씀)
- User ID=yourid;Password=yourpass ; db 서버 접근 인증이 SQL 인증 방식인 경우
출처: https://freeprog.tistory.com/221 [취미로 하는 프로그래밍 !!!]
SqlDataSource.ProviderName 속성
System.Data.SqlClient 공급자는 기본.NET Framework Data Provider for SQL Server입니다.
System.Data.OleDb 공급자는.NET Framework Data Provider for OLE DB입니다.
System.Data.Odbc 공급자는.NET Framework Data Provider for ODBC입니다.
System.Data.OracleClient 공급자는.NET Framework Data Provider for Oracle입니다.
출처 : https://docs.microsoft.com/ko-kr/dotnet/api/system.web.ui.webcontrols.sqldatasource.providername?view=netframework-4.8
namespace WebApplication9.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
DataSet ds = new DataSet();
ds = User_DAL.Select_User();
return View(ds);
}
}
}
RouteConfig.cs에 설정값인 시작 controller와 action명이 명시되어있는 곳 부터 시작하여
DataSet에 게시판 글을 table data를 넣어 view로 리턴할 것이다.
출처:https://www.soowave.com/entry/ASPNET-MVC-3-MSSQL-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-INSERT
namespace WebApplication9.DAL
{
public class User_DAL
{
public static SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["UserDB"].ToString());
public static DataSet Select_User()
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = string.Format("SELECT [Num],[Title],[Name],[Date] FROM [TEST_PROFILE].[dbo].[USER] order by [Num] desc");
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "[TEST_PROFILE].[dbo].[USER]");
con.Close();
return ds;
}
}
}
SqlConnection으로 webconfig에 설정해놓은 name인 UserDB 매핑해주기
@model System.Data.DataSet
@using System.Data
@{
ViewBag.Title = "Home Page";
}
<br />
<table class="table">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>날짜</th>
</tr>
</thead>
<tbody>
@foreach (DataRow row in Model.Tables["[TEST_PROFILE].[dbo].[USER]"].Rows)
{
<tr>
<th>@(row["Num"])</th>
<th>@Html.ActionLink("" + row["Title"], "About", new { id = row["Num"] })
<th>@(row["Name"])</th>
<th>@(row["Date"])</th>
</tr>
}
</tbody>
</table>
<hr />
<button class="btn btn-default">@Html.ActionLink("글 쓰기", "About", "Home")</button>
view단 게시판 간단하게 select 완료
string strConn = "Data Source=ip,port;Initial Catalog=TEST_PROFILE;User ID=id;Password=12345679;";
string sql = "select * from [TEST_PROFILE].[dbo].[USER]";
using (SqlConnection conn = new SqlConnection(strConn))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
try
{
conn.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
String num = rdr["Num"] as string;
String title = rdr[1] as String;
String name = rdr[2] as String;
String date = rdr[3] as String;
Console.WriteLine(" {0}, {1}, {2}, {3}", name, title, name, date);
}
}
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
}
}
이런식으로 using을 사용하여 바로 db연결하여 사용도 가능
그러나 호출 할 때 마다 저렇게 db 정보를 적는것보다 web.config에서 관리하는게 당연히 더 나은 방식으로 보인다.
출처 : https://freeprog.tistory.com/221
다음 crud는
https://github.com/jodongyeon/boardEx
있습니당.
'ASP.NET MVC' 카테고리의 다른 글
asp.net 게시판 만들기(MS graph API)(Teams 캘린더 읽어오기) (0) | 2022.04.26 |
---|---|
asp.net 게시판 만들기(MS 아이디로 로그인하기) (0) | 2022.04.25 |
Controller와 View의 데이터 전달에 대하여 (0) | 2022.04.20 |
asp.net 게시판 만들기(paging)(페이징 처리) (1) | 2022.04.19 |