ผู้เขียน : วิลมูฟ
หน้าแรก: http://www.amuhouse.com
อีเมล์: [email protected]
ข้อสงวนสิทธิ์: นี่เป็นผลงานต้นฉบับของผู้เขียน โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ
โดยทั่วไป ASP.NET จะใช้ SQL Server เป็นฐานข้อมูลส่วนหลัง โดยทั่วไป โปรแกรมตัวอย่างการดำเนินการฐานข้อมูล ASP.NET จะใช้การเข้าถึงข้อมูลที่แยกต่างหาก ซึ่งหมายความว่าแต่ละหน้าจะเขียนโค้ดเพื่อเชื่อมต่อกับฐานข้อมูล เข้าถึงข้อมูล และปิดฐานข้อมูล วิธีการนี้ทำให้เกิดข้อเสียประการหนึ่งคือถ้าฐานข้อมูลของคุณเปลี่ยนแปลง คุณต้องเปลี่ยนรหัสการเชื่อมต่อฐานข้อมูลทีละหน้า
ข้อเสียประการที่สองคือความซ้ำซ้อนของโค้ด
ดังนั้นฉันจึงพยายามใช้การเข้าถึงข้อมูลประเภท ASP.NET ผ่านคลาสการดำเนินการฐานข้อมูลที่สอดคล้องกัน
มาดูระบบข่าวประชาสัมพันธ์ที่พบในเว็บไซต์ทั่วไปเป็นตัวอย่าง ระบบการเผยแพร่ข่าวเกี่ยวข้องกับการเผยแพร่ข่าว การแสดงบทความ การจัดการบทความ ฯลฯ
โดยทั่วไปบทความจะมีชื่อเรื่อง ผู้แต่ง เวลาที่ตีพิมพ์ เนื้อหา และเราจำเป็นต้องระบุหมายเลขเหล่านั้น เราเขียนเป็นคลาสที่เรียกว่า Article class โดยมีโค้ดดังนี้
//Article.cs
ใช้ระบบ
เนมสเปซ News_Articles.Data
-
/// <สรุป>
/// คำอธิบายโดยสรุปสำหรับบทความ
/// </สรุป>
บทความชั้นเรียนสาธารณะ
-
ส่วนตัว int _id; // หมายเลขบทความ
สตริงส่วนตัว _author; //ผู้เขียนบทความ
สตริงส่วนตัว _topic; //ชื่อบทความ
DateTime ส่วนตัว _postTime; // เวลาที่เผยแพร่บทความ
ID สาธารณะของ
เนื้อหาบทความ
-
รับ { กลับ _id;}
ตั้งค่า { _id = ค่า;}
-
ผู้เขียนสตริงสาธารณะ
-
รับ { กลับ _ผู้เขียน }
ตั้งค่า { _author = ค่า; }
-
หัวข้อสตริงสาธารณะ
-
รับ { กลับ _topic; }
ตั้งค่า { _topic = ค่า; }
-
เนื้อหาสตริงสาธารณะ
-
รับ { กลับ _content;
ตั้งค่า { _content = ค่า; }
-
DateTime PostTime สาธารณะ
-
รับ { กลับ _postTime;
ตั้งค่า { _postTime = ค่า;
-
-
-
จากนั้นเราก็เขียนคลาสรวบรวมบทความ ArticleCollection
รหัสมีดังนี้
รหัสโปรแกรม
//ArticleCollection.cs
ใช้ระบบ [color=#0000ff];
ใช้ System.Collections;
เนมสเปซ News_Articles.Data
-
/// <สรุป>
/// คลาสรวบรวมบทความที่สืบทอดมาจาก ArrayList
/// </สรุป>
ArticleCollection ระดับสาธารณะ: ArrayList
-
ArticleCollection สาธารณะ () : ฐาน ()
-
}
ArticleCollection สาธารณะ (ICollection c) : ฐาน (c)
-
-
-
}[/สี]
คลาสนี้เทียบเท่ากับชุดข้อมูลใน ASP.NET (จริงๆ แล้วทั้งสองมีความแตกต่างกันมาก) วัตถุประสงค์หลักคือการรวบรวมบทความจำนวนมากเพื่อให้ DataGrid หรือ DataList สามารถใช้เป็นแหล่งข้อมูลใน ASP.NET หน้าแสดงบทความ.
ตอนนี้เราสามารถดำเนินการกับฐานข้อมูล News_Articles ได้ ดังที่ได้กล่าวไปแล้วนี่คือคลาสการดำเนินการฐานข้อมูล อาจตั้งชื่อมันว่า ArticleDb การใช้งานมีดังนี้:
รหัสโปรแกรม
//ArticleDb.cs
ใช้ระบบ;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Data;
ใช้ System.Data.SqlClient;
เนมสเปซ News_Articles.Data
-
/***////// <สรุป>
/// คลาสการดำเนินการฐานข้อมูล การอ่าน การแทรก การอัปเดต และการลบฐานข้อมูลบทความ
/// </สรุป>
ArticleDb คลาสสาธารณะ
-
SqlConnection ส่วนตัว _conn; // การเชื่อมต่อฐานข้อมูล SQL Server
สตริงส่วนตัว _articledb = "News_Articles"; // ตารางฐานข้อมูลบทความ SQL Server
/***////// <สรุป>
/// การเริ่มต้นคลาส การตั้งค่าการเชื่อมต่อฐานข้อมูล
/// </สรุป>
ArticleDb สาธารณะ ()
-
_conn = SqlConnection ใหม่ (ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <สรุป>
/// เปิดการเชื่อมต่อฐานข้อมูล
/// </สรุป>
โมฆะสาธารณะ Open()
-
ถ้า (_conn.State == ConnectionState.Closed)
_conn.เปิด();
}
/**//// <สรุป>
/// ปิดการเชื่อมต่อฐานข้อมูล
/// </สรุป>
โมฆะสาธารณะ ปิด()
-
ถ้า (_conn.State == ConnectionState.Open)
_conn.ปิด();
}
/**//// <สรุป>
/// อ่านบทความทั้งหมดในฐานข้อมูล
/// </สรุป>
/// <returns>ArticleCollection</return>
ArticleCollection GetArticles สาธารณะ ()
-
บทความ ArticleCollection = ArticleCollection ใหม่ ();
string sql = "เลือก * จาก" + _articledb;
SqlCommand cmd = SqlCommand ใหม่(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
ในขณะที่ (dr.Read())
-
บทความศิลปะ = PopulateArticle(dr);
บทความเพิ่ม(ศิลปะ);
-
ดร.ปิด();
คืนบทความ;
-
/***////// <สรุป>
/// ระบุหมายเลขบทความให้อ่านบทความในฐานข้อมูล
/// </สรุป>
/// <ผลตอบแทน>บทความ</ผลตอบแทน>
บทความสาธารณะ GetArticle (int articleId)
-
string sql = "เลือก * จาก" + _articledb + "โดยที่ ID ='" + articleId + "'";
SqlCommand cmd = SqlCommand ใหม่(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
บทความบทความ = PopulateArticle(dr);
ดร.ปิด();
คืนบทความ;
}
/**//// <สรุป>
/// อัปเดตบันทึกฐานข้อมูล โปรดทราบว่าคุณต้องกำหนดหมายเลขบทความ
/// </สรุป>
/// <ชื่อพารามิเตอร์ = "บทความ" ></ พารามิเตอร์>
โมฆะสาธารณะ UpdateArticle(บทความบทความ)
-
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 = article.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = article.Topic;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = article.Author;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;
cmd.ExecuteNonQuery(
}
/***////// <สรุป>
/// รับบทความที่ตีพิมพ์โดยผู้เขียนเฉพาะในฐานข้อมูล
/// </สรุป>
/// <param name="author"></param>
/// <ผลตอบแทน>การรวบรวมบทความ</ผลตอบแทน>
ArticleCollection สาธารณะ GetArticlesByAuthor (ผู้เขียนสตริง)
-
string sql = "เลือก * จาก" + _articledb +" โดยที่ผู้เขียน ='" + ผู้เขียน + "'";
SqlCommand cmd = ใหม่ SqlCommand(sql, _conn);
ArticleCollection articleCollection = ArticleCollection ใหม่ ();
SqlDataReader dr = cmd.ExecuteReader()
;
-
บทความ a = PopulateArticle(dr);
บทความ Collection.Add(a);
-
ดร.ปิด();
กลับบทความคอลเลกชัน;
-
/***////// <สรุป>
/// ลบบทความตามหมายเลขที่กำหนด
/// </สรุป>
/// <param name="articleID"></param>
โมฆะสาธารณะ DeleteArticle (int articleID)
-
string sql = "ลบจาก" + _articledb + "โดยที่ ID ='" + articleID + "'";
SqlCommand cmd = SqlCommand ใหม่ (sql, _conn);
cmd.ExecuteNonQuery();
-
/***////// <สรุป>
/// สร้างวัตถุบทความผ่าน SqlDataReader
/// </สรุป>
/// <param name="dr"></param>
/// <ส่งคืน></ส่งคืน>
บทความส่วนตัว PopulateArticle (SqlDataReader dr)
-
บทความ art = บทความใหม่ ();
art.ID = Convert.ToInt32(dr["ID"]);
art.Author = Convert.ToString(dr["ผู้เขียน"]);
art.Topic = Convert.ToString(dr["หัวข้อ"]);
art.Content = Convert.ToString(dr["เนื้อหา"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"]);
กลับงานศิลปะ;
-
/***////// <สรุป>
/// เพิ่มบทความเข้าฐานข้อมูลและส่งกลับหมายเลขบทความ
/// </สรุป>
/// <ชื่อพารามิเตอร์ = "บทความ" ></ พารามิเตอร์>
/// <returns>จำนวนบทความที่เพิ่งแทรก</returns>
สาธารณะ int AddPost(บทความบทความ)
-
string sql = "แทรก INTO " + _articledb +"(ผู้แต่ง,หัวข้อ,เนื้อหา,PostTime)"+
"ค่า(@ผู้เขียน, @topic, @content, @postTime) "+
"เลือก @postID = @@IDENTITY";
SqlCommand cmd = SqlCommand ใหม่(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = parameterDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = article.Author;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = article.Topic;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;
cmd.ExecuteNonQuery();
article.ID = (int)cmd.Parameters["@postID"].ค่า;
กลับบทความ ID;
-
-
-
กรอบพื้นฐานออกมาแล้ว ถ้าเราต้องการแสดงข้อมูลจากฐานข้อมูลบทความ News_Artices ในหน้า ASP.NET เราเพียงต้องเพิ่ม DataGrid หรือ DataList แล้วผูกแหล่งข้อมูล ตัวอย่างเช่น เพิ่ม DataGrid ใน Default.aspx ตั้งชื่อ 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 = บทความ;
ถ้า(!หน้าIsPostBack)
-
นี้.ArticlesDataGrid.DataBind();
}
myArticleDb.ปิด();
-
ด้วยวิธีนี้บทความทั้งหมดในฐานข้อมูลบทความจึงสามารถอ่านได้
หากคุณต้องการลบบทความ ให้เพิ่มโค้ดต่อไปนี้:
รหัสโปรแกรม
//Delete the article numbered 1
myArticleDb.DeleteArticle(1);
ใส่บทความ รหัสจะเป็นดังนี้:
รหัสโปรแกรม
//แทรกบทความใหม่โดยไม่ระบุหมายเลขบทความ SQL Server จะส่งกลับหมายเลขบทความหลังจากแทรกหมายเลขบทความเรียบร้อยแล้ว
บทความ newArticle = บทความใหม่ ();
newArticle.Author = "จะย้าย";
newArticle.Topic = "ทดสอบการแทรกบทความใหม่";
newArticle.Content = "นี่คือเนื้อหาของบทความที่ฉันเขียน";
newArticle.PostTime = DateTime.Now;
int articleId = myArticleDb.AddPost (บทความใหม่);
อัปเดตบทความด้วยรหัสต่อไปนี้:
รหัสโปรแกรม
//อัปเดตบทความ โปรดทราบว่าคุณต้องระบุหมายเลขบทความ
บทความ updateArticle = บทความใหม่();
updateArticle.ID = 3; //โปรดทราบว่าคุณต้องระบุหมายเลขบทความ
updateArticle.Author = "จะย้าย";
updateArticle.Topic = "ทดสอบข้อมูลอัพเดต";
updateArticle.Content = "นี่คือเนื้อหาของบทความที่ฉันอัปเดต";
updateArticle.PostTime = DateTime.Now;
myArticleDb.UpdateArticle (updateArticle);
ข้างต้นเป็นเพียงกรอบงาน และมีรายละเอียดมากมายเกี่ยวกับการใช้งานเฉพาะที่ไม่อยู่ในรายการ แต่จากกรอบงานข้างต้น คุณสามารถเขียนโค้ดสำหรับการทำงานของฐานข้อมูลได้ง่ายขึ้น ข้อเสนอแนะอีกประการหนึ่งคือการเขียนคำสั่ง SQL ข้างต้นสำหรับการเข้าถึงฐานข้อมูลเป็นขั้นตอนการจัดเก็บฐานข้อมูล เช่น การเพิ่มบทความ:
รหัสโปรแกรม
สร้างขั้นตอน AddPost
-
@ID อินพุทเอาท์พุต
@ผู้เขียน nvarchar (100)
@หัวข้อ nvarchar(100)
@เนื้อหาntext
@PostTime วันที่และเวลา
-
เช่น
แทรกลงใน News_Articles (ผู้เขียน, หัวข้อ, เนื้อหา, เวลาโพสต์) ค่า (@Author, @Topic, @Content, @PostTime);
เลือก @ID = @@IDENTITY
ไป
ภาคผนวก 1: สาขาฐานข้อมูล News_Articles
รหัสโปรแกรม
อธิบายว่าความยาวของประเภทข้อมูลสามารถเป็นค่าว่างได้หรือไม่
ID บทความหมายเลข int 4 no
ชื่อบทความหัวข้อ nvarchar 100 no
ผู้แต่ง authornvarchar 100 คือ
เนื้อหาบทความเนื้อหา ntext 16 ลำดับที่
PostTime เวลาเผยแพร่ datetime 8 ไม่ใช่
ค่าเริ่มต้นของ PostTime สามารถตั้งค่าเป็น (getutcdate())
คำสั่ง SQL คือ
Create TABLE [News_Articles] (
[ID] [int] ตัวตน (1, 1) ไม่เป็นโมฆะ
[หัวข้อ] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS ไม่ใช่ NULL
[ผู้เขียน] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[เนื้อหา] [ntext] COLLATE Chinese_PRC_CI_AS ไม่ใช่ NULL
[PostTime] [datetime] ไม่ใช่ข้อจำกัดที่เป็นโมฆะ [DF_News_Articles_PostTime] ค่าเริ่มต้น (getutcdate())
) บน [หลัก] TEXTIMAGE_ON [หลัก]
ไป
ภาคผนวก 2: คำอธิบายซอร์สโค้ดของโปรเจ็กต์ News_Articles: ก่อนที่จะเปิดไฟล์โปรเจ็กต์ News_Articles.csproj คุณต้องตั้งค่าพาธเสมือน News_Articles หรือเปลี่ยนการตั้งค่าใน News_Articles.csproj.webinfo สำหรับการดำเนินการปกติ จะต้องติดตั้ง SQL Server และต้องติดตั้งฐานข้อมูลบทความ News_Articles มีไฟล์ข้อความ SQL อยู่ในไดเร็กทอรีรากของซอร์สโค้ดโปรเจ็กต์