저자: 윌무브
홈페이지: http://www.amuhouse.com
이메일: [email protected]
면책조항: 이 작품은 작가의 원본 작품이므로 재인쇄 시 출처를 밝혀주세요.
ASP.NET은 일반적으로 SQL Server를 백엔드 데이터베이스로 사용합니다. 일반적으로 ASP.NET 데이터베이스 작업 샘플 프로그램은 별도의 데이터 액세스를 사용합니다. 즉, 각 페이지는 데이터베이스에 연결하고, 데이터에 액세스하고, 데이터베이스를 닫는 코드를 작성합니다. 이 방법에는 몇 가지 단점이 있습니다. 하나는 데이터베이스가 변경되면 페이지별로 데이터베이스 연결 코드를 변경해야 한다는 것입니다.
두 번째 단점은 코드 중복성입니다. 많은 코드가 반복되고 불필요합니다.
그래서 일관된 데이터베이스 연산 클래스를 통해 ASP.NET 형태의 데이터 접근을 구현해 보았습니다.
일반 웹사이트에 있는 보도 자료 시스템을 예로 들어 보겠습니다. 여기에는 이 데이터베이스의 이름을 News_Articles라고 합니다. 보도자료 시스템에는 뉴스 게시, 기사 표시, 기사 관리 등이 포함됩니다.
기사에는 일반적으로 제목, 저자, 출판 시간, 내용이 있으며 여기에 번호를 매겨야 합니다. Article 클래스라는 클래스로 작성하고 코드는 다음과 같습니다.
//Article.cs
System을 사용하여
News_Articles.Data 네임스페이스를
사용합니다.
{
/// <요약>
/// 기사에 대한 요약 설명입니다.
/// </summary>
공개 수업 기사
{
private int _id //기사 번호
private string _author; //기사 작성자
private string _topic; //기사 제목
private DateTime _postTime; //기사 게시 시간
private string _content; //기사 콘텐츠
공개 int ID
{
{반환 _id;}를 얻습니다.
설정 { _id = 값;}
}
공개 문자열 작성자
{
{return_author}를 얻습니다.
설정 { _author = 값 }
}
공개 문자열 주제
{
{반환_주제}를 얻습니다.
설정 { _topic = 값 }
}
공개 문자열 내용
{
{return_content}를 얻습니다.
설정 { _content = 값 }
}
공개 날짜시간 포스트타임
{
{return_postTime}을 얻습니다.
설정 { _postTime = 값 }
}
}
}
그런 다음 기사 컬렉션 클래스 ArticleCollection을 작성합니다.
코드는 다음과 같습니다
프로그램 코드
//ArticleCollection.cs
시스템[color=#0000ff] 사용;
System.Collections
네임스페이스 News_Articles.Data
사용
{
/// <요약>
/// ArrayList에서 상속된 기사의 컬렉션 클래스
/// </summary>
공개 클래스 ArticleCollection : ArrayList
{
공개 ArticleCollection() : 베이스()
{
}
공개 ArticleCollection(ICollection c) : 기본(c)
{
}
}
}[/색상]
이 클래스는 ASP.NET의 DataSet과 동일합니다(실제로 둘은 매우 다릅니다). 주요 목적은 ASP.NET에서 DataGrid 또는 DataList를 데이터 소스로 사용할 수 있도록 많은 항목을 수집하는 것입니다. 페이지를 표시합니다.
이제 News_Articles 데이터베이스에서 작업을 구현할 수 있습니다. 앞서 말했듯이 이것은 데이터베이스 작업 클래스입니다. 이름을 ArticleDb로 지정하는 것이 좋습니다. 구현은 다음과 같습니다:
프로그램 코드
//ArticleDb.cs
시스템 사용;
System.Configuration 사용;
System.Data 사용;
System.Data.SqlClient 사용,
네임스페이스 News_Articles.Data
{
/**//// <요약>
/// 기사 데이터베이스 읽기, 삽입, 업데이트, 삭제를 구현하는 데이터베이스 작업 클래스
/// </summary>
공개 클래스 ArticleDb
{
개인 SqlConnection _conn; //SQL Server 데이터베이스 연결
private string _articledb = "News_Articles"; //SQL Server 기사 데이터베이스 테이블
/**//// <요약>
/// 클래스 초기화, 데이터베이스 연결 설정
/// </summary>
공개 ArticleDb()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <요약>
/// 데이터베이스 연결 열기
/// </summary>
공개 무효 공개()
{
if(_conn.State == ConnectionState.Closed)
_conn.Open();
}
/**//// <요약>
/// 데이터베이스 연결을 닫습니다.
/// </summary>
공개 무효 닫기()
{
if(_conn.State == ConnectionState.Open)
_conn.Close();
}
/**//// <요약>
/// 데이터베이스의 모든 기사를 읽습니다.
/// </summary>
/// <returns>ArticleCollection</returns>
공개 ArticleCollection GetArticles()
{
ArticleCollection 기사 = new ArticleCollection();
string sql = "* FROM 선택" + _articledb;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
동안(dr.Read())
{
기사 아트 = PopulateArticle(dr);
기사.추가(예술);
}
dr.닫기();
기사 반환;
}
/**//// <요약>
/// 기사 번호가 주어지면 데이터베이스의 기사를 읽습니다.
/// </summary>
/// <returns>기사</returns>
공개 기사 GetArticle(int 기사Id)
{
string sql = "* FROM 선택" + _articledb + "ID='" + 기사Id + "'";
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
기사 기사 = PopulateArticle(dr);
dr.닫기();
반품 기사;
}
/**//// <요약>
/// 데이터베이스 기록을 업데이트하세요. 기사 번호를 설정해야 합니다.
/// </summary>
/// <param name="article"></param>
공공 무효 업데이트기사(기사 기사)
{
string sql = "업데이트" + _articledb +" SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "ID = @articleId";
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = 기사.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = 기사.Topic;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = 기사.저자;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = 기사.컨텐트;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = 기사.PostTime
cmd.ExecuteNonQuery()
}
/**//// <요약>
/// 데이터베이스에서 특정 저자가 출판한 기사를 가져옵니다.
/// </summary>
/// <param name="author"></param>
/// <returns>ArticleCollection</returns>
공개 ArticleCollection GetArticlesByAuthor(문자열 작성자)
{
string sql = "Select * FROM " + _articledb +" Where Author='" + 저자 + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection ArticleCollection = new ArticleCollection();
SqlDataReader dr = cmd.ExecuteReader()
;
{
기사 a = PopulateArticle(dr);
ArticleCollection.Add(a);
}
dr.닫기();
기사 컬렉션 반환;
}
/**//// <요약>
/// 특정 번호의 기사 삭제
/// </summary>
/// <param name="articleID"></param>
공개 무효 삭제Article(int 기사 ID)
{
string sql = "FROM 삭제" + _articledb + " 여기서 ID='" + 기사ID + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <요약>
/// SqlDataReader를 통해 기사 개체 생성
/// </summary>
/// <param name="dr"></param>
/// <반환></반환>
개인 기사 PopulateArticle(SqlDataReader dr)
{
기사 art = new Article();
art.ID = Convert.ToInt32(dr["ID"]);
art.Author = Convert.ToString(dr["Author"]);
art.Topic = Convert.ToString(dr["Topic"]);
art.Content = Convert.ToString(dr["Content"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"])
;
}
/**//// <요약>
/// 데이터베이스에 기사를 추가하고 기사 번호를 반환합니다.
/// </summary>
/// <param name="article"></param>
/// <returns>방금 삽입한 기사의 번호</returns>
public int AddPost(기사 기사)
{
string sql = "Insert INTO " + _articledb +"(저자, 주제, 콘텐츠, PostTime)"+
"VALUES(@author, @topic, @content, @postTime) "+
"@postID = @@IDENTITY 선택";
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = 기사.저자;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = 기사.Topic;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = 기사.컨텐트;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = 기사.PostTime;
cmd.ExecuteNonQuery();
기사.ID = (int)cmd.Parameters["@postID"].Value;
기사 ID 반환;
}
}
}
기본 프레임워크는 이미 나와 있습니다. ASP.NET 페이지에 기사 데이터베이스 News_Artices의 데이터를 표시하려면 DataGrid 또는 DataList를 추가한 다음 데이터 소스를 바인딩하기만 하면 됩니다. 예를 들어 Default.aspx에 DataGrid를 추가하고 이름을 ArticlesDataGrid로 지정한 다음
배경 코드 Default.aspx.cs에프로그램 코드를
추가합니다.
News_Articles.Data 사용;
그리고 Page_Load에 다음 코드를 추가합니다.
프로그램 코드
개인 무효 Page_Load(개체 전송자, System.EventArgs e)
{
// 여기에 페이지를 초기화하는 사용자 코드를 넣습니다.
ArticleDb myArticleDb = 새로운 ArticleDb();
myArticleDb.Open();
ArticleCollection 기사 = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = 기사;
if(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
myArticleDb.Close();
}
이러한 방식으로 기사 데이터베이스의 모든 기사를 읽을 수 있습니다.
기사를 삭제해야 하는 경우 다음 코드를 추가하세요.
프로그램 코드
//1번 기사 삭제
myArticleDb.DeleteArticle(1);
기사를 삽입합니다. 코드는 다음과 같습니다.
프로그램 코드
//기사 번호를 지정하지 않고 새 기사를 삽입합니다. 기사 번호가 성공적으로 삽입되면 SQL Server에서 기사 번호를 반환합니다.
기사 newArticle = 새 기사();
newArticle.Author = "Willmove";
newArticle.Topic = "새 기사 삽입 테스트";
newArticle.Content = "내가 쓴 글의 내용입니다.";
newArticle.PostTime = DateTime.Now;
int articleId = myArticleDb.AddPost(newArticle);
다음 코드를 사용하여 기사를 업데이트합니다.
프로그램 코드
//기사를 업데이트하려면 기사 번호를 지정해야 합니다.
기사 updateArticle = 새 기사();
updateArticle.ID = 3; //기사 번호를 지정해야 합니다.
updateArticle.Author = "Willmove";
updateArticle.Topic = "업데이트 데이터 테스트";
updateArticle.Content = "내가 업데이트한 기사의 내용입니다.";
updateArticle.PostTime = DateTime.Now;
myArticleDb.UpdateArticle(updateArticle);
위의 내용은 단지 프레임워크일 뿐이며, 나열되지 않은 특정 구현에 대한 세부정보가 많이 있습니다. 그러나 위의 프레임워크를 기반으로 하면 데이터베이스 작업을 위한 코드를 더 쉽게 작성할 수 있습니다.
을
추가하는 등 데이터베이스 액세스를 위한 위의 SQL 문을 데이터베이스 저장 프로시저로 작성하는 것입니다.
절차 만들기 AddPost
(
@ID int 출력,
@저자 nvarchar(100),
@주제 nvarchar(100),
@콘텐츠 ntext,
@PostTime 날짜시간
)
처럼
Insert INTO News_Articles(저자, 주제, 콘텐츠, PostTime) VALUES (@Author, @Topic, @Content, @PostTime);
@ID = @@IDENTITY를 선택하세요.
가다
부록 1: News_Articles 데이터베이스 필드
프로그램 코드
필드 이름은 데이터 유형 길이가 null일 수 있는지 여부를 설명합니다.
ID 기사 번호 int 4 아니요
주제 기사 제목 nvarchar 100 no
저자 Authornvarchar 100은
콘텐츠 기사 콘텐츠 ntext 16 아니요
PostTime 게시 시간 datetime 8 아니요
PostTime의 기본값은 (getutcdate())로 설정할 수 있습니다.
SQL 문은
Create TABLE [News_Articles] (
[ID] [int] IDENTITY (1, 1) NOT NULL,
[주제] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[작성자] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[내용] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL,
[PostTime] [datetime] NOT NULL CONSTRAINT [DF_News_Articles_PostTime] DEFAULT (getutcdate())
) ON [기본] TEXTIMAGE_ON [기본]
가다
부록 2: News_Articles 프로젝트 소스 코드 설명: News_Articles.csproj 프로젝트 파일을 열기 전에 News_Articles 가상 경로를 설정하거나 News_Articles.csproj.webinfo에서 설정을 변경해야 합니다. 정상적인 작동을 위해서는 SQL Server를 설치해야 하며 기사 데이터베이스 News_Articles를 설치해야 합니다. 프로젝트 소스 코드의 루트 디렉터리에 SQL 텍스트 파일이 있습니다.