المؤلف: ويلموف
الصفحة الرئيسية: http://www.amuhouse.com
البريد الإلكتروني: [email protected]
تنويه: هذا هو العمل الأصلي للمؤلف، يرجى الإشارة إلى المصدر عند إعادة الطباعة.
يستخدم ASP.NET بشكل عام SQL Server كقاعدة بيانات خلفية. بشكل عام، تستخدم برامج نماذج تشغيل قاعدة بيانات ASP.NET وصولاً منفصلاً للبيانات، مما يعني أن كل صفحة تكتب تعليمات برمجية للاتصال بقاعدة البيانات والوصول إلى البيانات وإغلاق قاعدة البيانات. تجلب هذه الطريقة بعض العيوب، أحدها هو أنه إذا تغيرت قاعدة البيانات الخاصة بك، فيجب عليك تغيير صفحة التعليمات البرمجية لاتصال قاعدة البيانات بصفحة.
العيب الثاني هو تكرار التعليمات البرمجية، حيث يتم تكرار الكثير من التعليمات البرمجية وغير ضرورية.
لذلك، حاولت تنفيذ الوصول إلى البيانات من نوع ASP.NET من خلال فئة تشغيل قاعدة بيانات متسقة.
لنأخذ نظام النشرات الإخبارية الموجود على المواقع العامة كمثال، وهو يتطلب قاعدة بيانات للمقالات. يتضمن نظام إصدار الأخبار نشر الأخبار وعرض المقالات وإدارة المقالات وما إلى ذلك.
تحتوي المقالة عمومًا على عنوان، ومؤلف، ووقت النشر، والمحتوى، ونحتاج إلى ترقيمها. نكتبها كفئة تسمى فئة المادة، الكود كالتالي:
//Article.cs
باستخدام
مساحة الاسم News_Articles.Data
{
/// <الملخص>
/// وصف ملخص للمادة.
/// </الملخص>
المادة الطبقة العامة
{
Private int _id; // رقم المقالة
سلسلة خاصة _author // مؤلف المقال
سلسلة خاصة _topic; // عنوان المقال
Private DateTime _postTime; // وقت نشر المقال
سلسلة خاصة _content // محتوى المقالة
معرف int العام
{
الحصول على {عودة _id؛}
مجموعة { _id = القيمة؛}
}
مؤلف السلسلة العامة
{
الحصول على { عودة _author }
تعيين { _author = القيمة }
}
موضوع السلسلة العامة
{
الحصول على { إرجاع _الموضوع }
تعيين { _topic = القيمة }
}
محتوى السلسلة العامة
{
احصل على { محتوى الإرجاع }
تعيين {_المحتوى = القيمة}
}
التاريخ والوقت العام PostTime
{
احصل على {return _postTime}؛
تعيين { _postTime = القيمة }
}
}
}
ثم نكتب فئة جمع المقالات ArticleCollection
الرمز هو كما يلي
رمز البرنامج
//ArticleCollection.cs
باستخدام System[color=#0000ff];
باستخدام System.Collections
مساحة الاسم News_Articles.Data
{
/// <الملخص>
/// فئة مجموعة المقالات الموروثة من ArrayList
/// </الملخص>
مجموعة المقالات العامة: ArrayList
{
مجموعة المقالات العامة () : القاعدة ()
{
}
ArticleCollection العامة(ICollection c): القاعدة(c)
{
}
}
}[/لون]
هذه الفئة تعادل DataSet في ASP.NET (في الواقع هما مختلفان تمامًا). والغرض الرئيسي منها هو جمع العديد من المقالات بحيث يمكن استخدام DataGrid أو DataList كمصدر بيانات في ASP.NET. عرض المقالة.
الآن يمكننا تنفيذ العملية على قاعدة بيانات News_Articles، كما قلت، هذه فئة تشغيل قاعدة البيانات. قد نسميها أيضًا ArticleDb. التنفيذ كالتالي:
كود البرنامج
//ArticleDb.cs
باستخدام النظام؛
باستخدام System.Configuration؛
باستخدام System.Data؛
باستخدام System.Data.SqlClient؛
مساحة الاسم News_Articles.Data
{
/**//// <الملخص>
/// فئة تشغيل قاعدة البيانات، وقراءة وإدراج وتحديث وحذف قاعدة بيانات المقالات
/// </الملخص>
مقالة الطبقة العامةDb
{
Private SqlConnection _conn; // اتصال قاعدة بيانات SQL Server
سلسلة خاصة _articledb = "News_Articles"؛ // جدول قاعدة بيانات مقالة SQL Server
/**//// <الملخص>
/// تهيئة الفصل وإعداد اتصال قاعدة البيانات
/// </الملخص>
المادة العامة ()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <summary>
/// فتح اتصال قاعدة البيانات
/// </الملخص>
الفراغ العام مفتوح ()
{
إذا (_conn.State == ConnectionState.Closed)
_conn.Open();
}
/**//// <summary>
/// أغلق اتصال قاعدة البيانات
/// </الملخص>
إغلاق الفراغ العام ()
{
إذا (_conn.State == ConnectionState.Open)
_conn.Close();
}
/**//// <summary>
/// قراءة جميع المقالات في قاعدة البيانات
/// </الملخص>
/// <returns>مجموعة المقالات</returns>
مجموعة المقالات العامة GetArticles()
{
ArticleCollection Articles = new ArticleCollection();
string sql = "Select * FROM" + _articledb;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
بينما (دكتور قراءة ())
{
فن المقالة = PopulateArticle(dr);
Articles.Add(art);
}
dr.Close();
إرجاع المقالات؛
}
/**//// <الملخص>
/// بالنظر إلى رقم المقالة، اقرأ مقالًا في قاعدة البيانات
/// </الملخص>
/// <returns>مقال</returns>
مقالة عامة GetArticle(int ArticleId)
{
string sql = "Select * FROM" + _articledb + "Where ID='" +articleId + "'";
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
مقالة المادة = PopulateArticle(dr);
dr.Close();
عودة المادة؛
}
/**//// <summary>
/// تحديث سجلات قاعدة البيانات، يرجى ملاحظة أنك بحاجة إلى تعيين رقم المقالة
/// </الملخص>
/// <param name="article"></param>
UpdateArticle الفراغ العام (مقال مقال)
{
سلسلة SQL = "تحديث" + _articledb +" تعيين الموضوع=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "أين المعرف = @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>
/// <returns>مجموعة المقالات</returns>
مجموعة المقالات العامة GetArticlesByAuthor(مؤلف السلسلة)
{
string sql = "Select * FROM " + _articledb +" Where Author='" + Author + "'";
SqlCommand cmd = new SqlCommand(sql,
_conn
)
;
{
المادة أ = PopulateArticle(dr);
المادةCollection.Add(a);
}
dr.Close();
إرجاع المادة المجموعة؛
}
/**//// <الملخص>
/// حذف مقالة برقم معين
/// </الملخص>
/// <param name="articleID"></param>
حذف المادة بفراغ عام (معرف المقالة int)
{
string sql = "Delete FROM" + _articledb + " Where ID='" +articleID + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <الملخص>
/// إنشاء كائن المقالة من خلال SqlDataReader
/// </الملخص>
/// <param name="dr"></param>
/// <returns></returns>
مقالة خاصة 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"]);
return art;
}
/**//// <الملخص>
/// إضافة مقالة إلى قاعدة البيانات وإرجاع رقم المقالة
/// </الملخص>
/// <param name="article"></param>
/// <returns>رقم المقالة التي تم إدراجها للتو</returns>
الباحث العام AddPost(مقال مقال)
{
string sql = "Insert INTO" + _articledb +"(Author,Topic,Content,PostTime)"+
"القيم (@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 =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"].Value;
إرجاع المادة.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 = new ArticleDb();
myArticleDb.Open();
ArticleCollection Articles = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = المقالات؛
إذا (!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
myArticleDb.Close();
}
وبهذه الطريقة، يمكن قراءة جميع المقالات الموجودة في قاعدة بيانات المقالات.
إذا كنت تريد حذف مقالة، أضف الكود التالي:
كود البرنامج
//حذف المقالة المرقمة 1
myArticleDb.DeleteArticle(1);
أدخل مقالة، الكود كما يلي:
رمز البرنامج
// أدخل مقالة جديدة دون تحديد رقم المقالة. سيتم إرجاع رقم المقالة بواسطة SQL Server بعد إدراج رقم المقالة بنجاح.
مقالة جديدة = مقالة جديدة ()؛
newArticle.Author = "Willmove";
newArticle.Topic = "اختبار إدراج مقال جديد";
newArticle.Content = "هذا هو محتوى المقالة التي كتبتها";
newArticle.PostTime = DateTime.Now;
int ArticleId = myArticleDb.AddPost(newArticle);
قم بتحديث مقالة بالكود التالي:
رمز البرنامج
// قم بتحديث مقالة، يرجى ملاحظة أنك بحاجة إلى تحديد رقم المقالة
Article updateArticle = new Article();
updateArticle.ID = 3; // لاحظ أنك بحاجة إلى تحديد رقم المقالة
updateArticle.Author = "Willmove";
updateArticle.Topic = "اختبار بيانات التحديث";
updateArticle.Content = "هذا هو محتوى المقالة التي قمت بتحديثها";
updateArticle.PostTime = DateTime.Now;
myArticleDb.UpdateArticle(updateArticle);
ما ورد أعلاه هو مجرد إطار عمل، وهناك العديد من التفاصيل حول التنفيذ المحدد غير المدرجة. ولكن بناءً على الإطار المذكور أعلاه، يمكنك بسهولة كتابة التعليمات البرمجية لعمليات قاعدة البيانات. اقتراح آخر هو كتابة عبارة SQL أعلاه للوصول إلى قاعدة البيانات كإجراء مخزن لقاعدة البيانات، مثل إضافة مقال:
رمز البرنامج
إنشاء الإجراء AddPost
(
@معرف الإخراج،
@ المؤلف نفارتشار (100)،
@ الموضوع نفارتشار (100)،
@محتوى ntext،
@PostTime التاريخ
)
مثل
أدخل في قيم News_Articles (Author، Topic، Content، PostTime) (@Author، @Topic، @Content، @PostTime)؛
حدد @ID = @@IDENTITY
يذهب
الملحق 1: قاعدة بيانات مجالات الأخبار_المقالات
رمز البرنامج
ما إذا كان طول نوع البيانات فارغًا
معرف رقم المقالة int 4 no
عنوان المقال الموضوع nvarchar 100 لا
المؤلف Authornvarchar 100 هو
محتوى المقال محتوى ntext 16 رقم
وقت نشر PostTime تاريخ 8 لا
يمكن تعيين القيمة الافتراضية لـ PostTime على (getutcdate())
عبارة SQL هي
إنشاء جدول [News_Articles] (
[المعرف] [int] الهوية (1، 1) ليست فارغة،
[الموضوع] [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] ليس قيدًا فارغًا [DF_News_Articles_PostTime] افتراضي (getutcdate())
) على [الأساسية] TEXTIMAGE_ON [الأساسية]
يذهب
الملحق 2: وصف الكود المصدري لمشروع News_Articles: قبل فتح ملف المشروع News_Articles.csproj، تحتاج إلى تعيين المسار الظاهري News_Articles، أو تغيير الإعدادات في News_Articles.csproj.webinfo. للتشغيل العادي، يجب تثبيت SQL Server وتثبيت قاعدة بيانات المقالات News_Articles. توجد ملفات نصية SQL في الدليل الجذر للكود المصدري للمشروع.