หลายครั้งที่เราคุ้นเคยกับการออกจากกระบวนการเริ่มต้นของการเชื่อมต่อฐานข้อมูลไปที่ 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(SqlParameter ใหม่("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(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(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 = "";
เมืองข้อความ= "";
รัฐข้อความ = "";
ประเทศข้อความ = "";
BindGrid();
-
//การเรียกใช้ฟังก์ชันย่อย
โมฆะสาธารณะ BindGrid()
-
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * จากผู้เผยแพร่โดยที่ pub_id เช่น '99%'", mySqlCon);
ชุดข้อมูล myds = ชุดข้อมูลใหม่ ();
mySqlCom.Fill(myds, "ผู้เผยแพร่");
dgMyGrid.DataSource = myds.Tables["ผู้เผยแพร่"].DefaultView; dgMyGrid.DataBind();
-
</สคริปต์>
<h2>เพิ่มผู้เผยแพร่ใหม่:</h2>
<br/>
รหัสผู้ออกควรเริ่มต้นด้วย 99 และมีตัวเลข 4 หลัก<br/>
รหัสผู้ออก:
<asp:textbox id="Pub_Id" runat="server" />ชื่อ:
<asp:textbox id="Pub_Name" runat="เซิร์ฟเวอร์" />
เมือง:
<asp:textbox id="เมือง" runat="เซิร์ฟเวอร์" />
<br/>
จังหวัด:
<asp:textbox id="สถานะ" runat="เซิร์ฟเวอร์" />
ประเทศ:
<asp:textbox id="ประเทศ" runat="เซิร์ฟเวอร์" />
<br/>
<br/>
<asp:button Text = "ส่ง" OnClick = "AddPublisher" runat = "เซิร์ฟเวอร์" ID = "Button1" /><br/>
<span id = "ข้อความ" runat = "เซิร์ฟเวอร์" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
ตัวอย่างนี้ดูเหมือนว่าจะใช้ได้ตั้งแต่แรกเห็น และไม่มีการรายงานข้อผิดพลาดในระหว่างการดีบัก อย่างไรก็ตาม หลังจากเพิ่มข้อมูลลงในเพจที่สร้างขึ้น ข้อผิดพลาดจะถูกรายงานเมื่อใด ยื่นบอกว่าคุณสมบัติไม่ตรงกันอะไรสักอย่าง สาเหตุคืออะไร? อันที่จริงสิ่งนี้เกิดจากกระบวนการเริ่มต้นเมื่อโหลดเพจ แต่มีปัญหาที่นี่ซึ่งฉันไม่เคยทราบมาก่อนนั่นคือเนื่องจากอินสแตนซ์ DB ได้รับการเตรียมใช้งานในระหว่างกระบวนการเริ่มต้นเพจจึงควร สามารถสร้างแอปพลิเคชันได้โดยตรง แต่ดูเหมือนว่าจะไม่เป็นเช่นนั้น! ยังคงจำเป็นต้องใส่กระบวนการเริ่มต้นลงในฟังก์ชันเฉพาะเพื่อให้บรรลุผล! ดูด้านล่าง:
<<ภาษาสคริปต์ = "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=การเชื่อมต่อ Sql ใหม่ (strprovider);
string myinsertCmd ="ใส่ลงในผู้เผยแพร่ ( pub_id, pub_name, เมือง, รัฐ, ประเทศ ) ค่า (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); // การนำกระบวนการเริ่มต้นไปใช้
mySqlCom.Parameters.Add(SqlParameter ใหม่("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(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(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 = "";
เมืองข้อความ= "";
รัฐข้อความ = "";
ประเทศข้อความ = "";
BindGrid();
-
เมื่อเรียกใช้ฟังก์ชันย่อย public void BindGrid() การเชื่อมต่อ DB จะต้องเริ่มต้นได้ด้วย
-
สตริง strprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=การเชื่อมต่อ Sql ใหม่ (strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * จากผู้เผยแพร่โดยที่ pub_id เช่น '99%'",mySqlCon);
ชุดข้อมูล myds = ชุดข้อมูลใหม่ ();
mySqlCom.Fill(myds, "ผู้เผยแพร่");
dgMyGrid.DataSource = myds.Tables["ผู้เผยแพร่"].DefaultView;
dgMyGrid.DataBind();
-
</สคริปต์>
<h2>เพิ่มผู้เผยแพร่ใหม่:</h2>
<br>
รหัสผู้ออกควรเริ่มต้นด้วย 99 และมีตัวเลข 4 หลัก<br>
รหัสผู้ออก:
<asp:textbox id="Pub_Id" runat="server" />ชื่อ:
<asp:textbox id="Pub_Name" runat="เซิร์ฟเวอร์" />
เมือง:
<asp:textbox id="เมือง" runat="เซิร์ฟเวอร์" />
<br>
จังหวัด:
<asp:textbox id="สถานะ" runat="เซิร์ฟเวอร์" />
ประเทศ:
<asp:textbox id="ประเทศ" runat="เซิร์ฟเวอร์" />
<br>
<br>
<asp:button Text = "ส่ง" OnClick = "AddPublisher" runat = "เซิร์ฟเวอร์" ID = "Button1" /><br>
<span id = "ข้อความ" runat = "เซิร์ฟเวอร์" />
<br>
<asp:DataGrid id="dgMyGrid" runat="เซิร์ฟเวอร์" />
</form>>
หลังจากการปรับเปลี่ยนดังกล่าว เราสามารถบรรลุการเพิ่มขึ้นของข้อมูลในความรู้สึกที่แท้จริง! แต่ฉันก็ลองลบและอัปเดตข้อมูลด้วย เมื่อโหลดเพจแล้ว ก็มีการกำหนดแอตทริบิวต์ DB เริ่มต้นโดยตรง แต่ก็ไม่มีปัญหา ฉันไม่ทราบสาเหตุ ขอบคุณ:)