في كثير من الأحيان، اعتدنا على ترك عملية تهيئة اتصال قاعدة البيانات بـ Page_Load، في الواقع، هذا له مزايا وعيوب. الميزة هي أن هذه الطريقة عملية للغاية عند مواجهة مشكلات أحادية الجانب. هذا ليس مفيدًا جدًا في هذه الحالة! على سبيل المثال:
/// على سبيل المثال:
<script language="C#" runat="server">
SqlConnection mySqlCon;
Page_Load (Object Src، EventArgs E) باطلة محمية
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); // عملية التهيئة
إذا (!IsPostBack)
BindGrid();
}
الفراغ العام AddPublisher (مرسل الكائن، EventArgs E)
{
String myinsertCmd = "أدخل في قيم الناشرين (pub_id، pub_name، المدينة، الولاية، البلد) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon); // استدعاء أمر التهيئة
// تحقيق المطابقة
mySqlCom.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(new SqlParameter("@pubname", SqlDbType.VarChar, 40));
mySqlCom.Parameters["@pubname"].Value = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Value = City.Text;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Value = State.Text;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Value = Country.Text;
// افتح قاعدة البيانات
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
message.InnerHtml = "<b>تمت إضافة السجل</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
City.Text= "";
State.Text = "";
Country.Text = "";
BindGrid();
}
// استدعاء الوظيفة الفرعية
الفراغ العام BindGrid ()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * from الناشرين حيث pub_id like '99%'"، mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "publishers");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView; dgMyGrid.DataBind();
}
</script>
<h2>إضافة ناشر جديد:</h2>
<br/>
يجب أن يبدأ معرف جهة الإصدار بالرقم 99 ويحتوي على 4 أرقام<br/>
معرف المصدر:
<asp:textbox id="Pub_Id" runat="server" />الاسم:
<asp:textbox id="Pub_Name" runat="server" />
المدينة:
<asp:textbox id="City" runat="server" />
<br/>
المحافظة:
<asp:textbox id="State" runat="server" />
الدولة:
<asp:textbox id="Country" runat="server" />
<br/>
<br/>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br/>
<span id="Message" runat="server" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
يبدو هذا المثال جيدًا للوهلة الأولى، ولم يتم الإبلاغ عن أي خطأ أثناء تصحيح الأخطاء، ومع ذلك، بعد إضافة البيانات إلى الصفحة التي تم إنشاؤها، سيتم الإبلاغ عن خطأ عندما تقديم، قائلا أن السمات غير متطابقة شيء من هذا القبيل. ما هو السبب؟ في الواقع، يحدث هذا بسبب عملية التهيئة عند تحميل الصفحة، ولكن هناك مشكلة هنا لم أتمكن من اكتشافها مطلقًا، أي أنه منذ تهيئة مثيل قاعدة البيانات أثناء عملية تهيئة الصفحة، يجب يكون من الممكن إنشاء التطبيق مباشرة، ولكن لا يبدو ذلك! لا يزال من الضروري وضع عملية التهيئة في وظيفة محددة لتحقيق ذلك! انظر أدناه:
<<لغة البرمجة = "C#" runat = "الخادم">
Page_Load (Object Src، EventArgs E) باطلة محمية
{
// يتم استخدام عبارة IF مباشرة أثناء تحميل الصفحة، في الواقع، لا تتم إضافة أي شيء!
إذا (!IsPostBack)
BindGrid();
}
الفراغ العام AddPublisher (مرسل الكائن، EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs"; // إنشاء عملية التهيئة
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="insert into قيم الناشرين ( pub_id, pub_name, city, State, Country) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); // تنفيذ عملية التهيئة
mySqlCom.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(new SqlParameter("@pubname", SqlDbType.VarChar, 40));
mySqlCom.Parameters["@pubname"].Value = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Value = City.Text;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Value = State.Text;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Value = Country.Text;
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
message.InnerHtml = "<b>تمت إضافة السجل</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
City.Text= "";
State.Text = "";
Country.Text = "";
BindGrid();
}
عند استدعاء الوظيفة الفرعية BindGrid() العامة، يجب أيضًا تهيئة اتصال قاعدة البيانات.
{
string strprovider = "server = dev؛ uid = sa؛ pwd = pauperboyboy؛ database = pubs"؛
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * from الناشرين حيث pub_id like '99%'",mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "publishers");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>إضافة ناشر جديد:</h2>
<ر>
يجب أن يبدأ معرف جهة الإصدار بالرقم 99 وأن يحتوي على 4 أرقام<br>
معرف المصدر:
<asp:textbox id="Pub_Id" runat="server" />الاسم:
<asp:textbox id="Pub_Name" runat="server" />
المدينة:
<asp:textbox id="City" runat="server" />
<ر>
المحافظة:
<asp:textbox id="State" runat="server" />
الدولة:
<asp:textbox id="Country" runat="server" />
<ر>
<ر>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br>
<span id="Message" runat="server" />
<ر>
<asp:DataGrid id="dgMyGrid" runat="server" />
</form>>
بعد هذا التعديل يمكننا تحقيق زيادة في البيانات بشكل حقيقي! لكنني حاولت أيضًا حذف البيانات وتحديثها، عندما تم تحميل الصفحة، تم تعيينها مباشرةً لسمة قاعدة بيانات التهيئة، ولكن لم تكن هناك مشكلة، ولا أعرف السبب، إذا كان أي شخص يعرف ذلك، فيرجى إبلاغي بذلك. شكرًا:)