1. ความแตกต่างระหว่าง <%=...%> และ <%#... %>:
คำตอบ: <%=...%> จะถูกเรียกเมื่อโปรแกรมถูกเรียกใช้งาน และ <%#... %> จะถูกเรียกหลังจากเมธอด DataBind()
2. ตัวควบคุมจะได้รับข้อมูลประเภทใด?
คำตอบ: การควบคุมที่ได้รับ Bind โดยทั่วไปจะมีการควบคุมการรวบรวมเช่น DropDownList, DataList, DataGrid และ ListBox ตัวควบคุมหลักที่รวมเข้าด้วยกันคือ ArrayList, Hashtable, DataView และ DataReader ซึ่งเราสามารถทำให้ถูกต้องได้ในอนาคตและจะมี ไม่มีข้อผิดพลาดที่ DataTable ถูกผูกไว้ :)
3. DataBind ระบบจะตั้งค่าเริ่มต้นข้อมูลที่ได้รับเป็น String จะแปลงเป็นประเภทอื่นได้อย่างไร?
DataBinder.Eval(Container.DataItem,"ประเภทการแปลง", "รูปแบบ")
"รูปแบบ" สุดท้ายนี้เป็นทางเลือก และโดยทั่วไปแล้วคุณไม่จำเป็นต้องกังวลเกี่ยวกับมัน Container.DataItem เป็นรายการข้อมูลที่รวมไว้ และ "ประเภทการแปลง" หมายถึงสิ่งต่างๆ เช่น จำนวนเต็ม สตริง และบูลีน
4 เนมสเปซหลัก:
<% @ Import Namespace="System.Data" %> ใช้ในการประมวลผลข้อมูล
<% @ Import Namespace="System.Data.ADO" % > ใช้เมื่อใช้ ADO.net;
<% @ Import Namespace="System.Data.SQL" %> ฐานข้อมูล SQL Server เท่านั้น
<% @ Import Namespace="System.Data.XML" %> ไม่จำเป็นต้องดูสิ่งที่ใช้ในการประมวลผล XML
<% @ Import Namespace="System.IO" %> ใช้เมื่อประมวลผลไฟล์
<% @ Import Namespace="System.Web.Util" %> ทุกคนจะใช้มันเมื่อส่งอีเมล
<% @ Import Namespace="System.Text" %> คุณสมบัติทั่วไปและวิธีการของ 5.Connections (SQLConection หรือ ADOConnection) ถูกนำมาใช้เมื่อเข้ารหัสข้อความ
:
|. ConnectionString รับหรือตั้งค่าคำสั่งเพื่อเชื่อมต่อกับฐานข้อมูล
|. ConnectionTimeout รับหรือตั้งเวลาสูงสุดในการเชื่อมต่อกับฐานข้อมูล ซึ่งเป็นเวลาหมดเวลาด้วย
| . DataBase รับหรือตั้งชื่อฐานข้อมูลที่จะเปิดบนเซิร์ฟเวอร์ฐานข้อมูล
|. DataSource รับหรือตั้งค่า DSN ทุกคนคุ้นเคย :)
|. รหัสผ่าน รับหรือตั้งรหัสผ่าน
|. UserID รับหรือตั้งชื่อล็อกอิน
|. State รับสถานะของการเชื่อมต่อปัจจุบัน
|. Open() เปิดการเชื่อมต่อ
|. Close() ปิดการเชื่อมต่อ
|. Clone() โคลนการเชื่อมต่อ (ฮ่าฮ่า แกะเชื่อมต่อได้ ฉันก็เชื่อมต่อได้)
ตัวอย่าง:
SQLConnection myConnection = SQLConnection ใหม่ ();
myConnection.DataSource = "mySQLServer";
myConnection.Password = "";
myConnection.UserID = "sa";
myConnection.ConnectionTimeout = 30;
myConnection.Open();
myConnection.Database = "ลมเหนือ";
myConnection.IsolationLevel = IsolationLevel.ReadComitting
6. วิธีการและคุณสมบัติของ Command ที่ใช้กันทั่วไป
|. ActiveConnection รับหรือตั้งค่าการเชื่อมต่อ
| . CommandText ดำเนินการคำสั่ง SQL หรือชื่อขั้นตอนการจัดเก็บ (StoredProcedure)
|. CommandTimeout เวลาดำเนินการสูงสุด
|. CommandType การดำเนินการคำสั่งมีสามประเภท (StoredProcedure, Text, TableDirect) ค่าเริ่มต้นคือ Text
|. พารามิเตอร์ที่ใช้เมื่อดำเนินการขั้นตอนการจัดเก็บ
| . Execute() รันคำสั่ง SQL หรือขั้นตอนการจัดเก็บ
|. ExecuteNonQuery() เช่นเดียวกับข้างต้น ข้อแตกต่างคือไม่ส่งคืนชุดระเบียน
|. โคลน () คำสั่งโคลน
ตัวอย่าง:
string mySelectQuery = "SELECT * FROM Category ORDER BY CategoryID";
stringmyConnectString="userid=sa;password=;database=northwind;server=mySQLServer";
SQLCommand myCommand = SQLCommand ใหม่ (mySelectQuery);
myCommand.ActiveConnection = SQLConnection ใหม่ (myConnectString);
myCommand.CommandTimeout = 15;
myCommand.CommandType = CommandType.Text;< /FONT >
7. สองวิธีในการเปิดและปิดฐานข้อมูล:
1.MyConnection.Open(); //เปิดการเชื่อมต่อ
MyConnection.Close();
2.MyCommand.ActiveConnection.Open();
MyCommand.ActiveConnection.Close()
8. ใช้ชุดข้อมูลเพื่อเพิ่ม แก้ไข และลบข้อมูลในฐานข้อมูล
ก.เพิ่มข้อมูล
DataRow dr=MyDataSet.Tables["UserList"].NewRow();
dr["ชื่อผู้ใช้"] = "ข่าวรายสัปดาห์";
dr["ReMark"] = "100";
dr["ความคิดเห็น"] = "MM ที่สวยงาม";
ข.
MyDataSet.Tables.Rows.Add(dr);
MyDataSet.Tables["UserList"].Rows[0]["UserName"]="Brother Flying Knife"
;
MyDataSet.Tables["UserList"],Rows[0].Delete();
d.กู้คืนข้อมูล
ถ้า (MyDataSet.HasErrors)
-
MyDataSet.RejectChanges();
-
e. ตรวจสอบว่าชุดข้อมูลมีการเปลี่ยนแปลงหรือไม่
ถ้า (MyDataSet.HasChanges)
-
//บันทึกโค้ด
}อื่น{
//เนื่องจากไม่มีการเปลี่ยนแปลงจึงไม่จำเป็นต้องบันทึกเพื่อประหยัดเวลา
}
ฉ. อัพเดตฐานข้อมูล
MyComm.Update(MyDataSet); //อัพเดตตารางทั้งหมดในฐานข้อมูล
MyComm.Update(MyDataSet,"UserList"); //อัพเดตตาราง
9.DataGrid ใช้ฟังก์ชันเพจจิ้ง
AllowPaging="True" //หมายถึงการอนุญาตเพจ ซึ่งเป็นสิ่งสำคัญที่สุด ด้วยสิ่งนี้ เราสามารถแบ่งหน้าได้
PageSize="5" //ระบุจำนวนเรคคอร์ดที่แสดงในแต่ละหน้า หากไม่ได้เขียน ค่าเริ่มต้นจะเป็น 10
PagerStyle-HorizontalAlign="Right" //ระบุตำแหน่งของจอแสดงผล faceted ค่าเริ่มต้นคือ Left
PagerStyle-NextPageText="Next page" //Change <> เป็นสตริงหน้าก่อนหน้าและหน้าถัดไป
PagerStyle-PrevPageText = "หน้าก่อนหน้า"
PagerStyle-Mode = "NumericPages" // เปลี่ยน <> เป็น 123 จอแสดงผลดิจิตอล
10. แสดงจำนวนหน้าทั้งหมด และหน้าใดที่รายงานอยู่ในปัจจุบัน
หน้าปัจจุบันคือ: <font color=red><%=DataGrid1.CurrentPageIndex+1%></font><br>
จำนวนหน้าทั้งหมดคือ: <font color=red><%=DataGrid1.PageCount%></font><br>
11.เพจส่วนตัว
Basecamp ของโปรแกรมเมอร์ "Close Contact ASP.Net (14)" มีโค้ดสมบูรณ์
12 หากต้องการรีเซ็ตเพจให้เป็นสถานะที่ถูกต้อง
IValidator วาล;
foreach (val ในเครื่องมือตรวจสอบความถูกต้อง)
-
Val.IsValid = จริง;
-
13. ดำเนินการลำดับการตรวจสอบทั้งหมดอีกครั้ง
IValidator วาล;
foreach (val ในเครื่องมือตรวจสอบความถูกต้อง)
-
Val.ตรวจสอบ();
-
14. ปิดการใช้งานการตรวจสอบลูกค้า
<%@ ภาษาเพจ = "c#" clienttarget=downlevel %>
15.การใช้งานการควบคุม Repeater, DataList และ DataGrid"
การควบคุมเหล่านี้ช่วยลดความซับซ้อนของสถานการณ์แอปพลิเคชันเว็บทั่วไปหลายประการ รวมถึงรายงาน ตะกร้าสินค้า รายการผลิตภัณฑ์ และแบบสอบถาม
เมนูผลลัพธ์และการนำทาง Repeater เป็นตัวควบคุมเดียวที่อนุญาตให้มีแฟรกเมนต์ HTML ในเทมเพลต
16. ความแตกต่างระหว่าง Server.Execute("another.aspx") และ Server.Transfer("another.aspx"):
ดำเนินการถ่ายโอนจากเพจปัจจุบันไปยังเพจที่ระบุ และส่งคืนการดำเนินการไปยังเพจปัจจุบัน
การโอนคือการถ่ายโอนการดำเนินการไปยังเพจที่ระบุโดยสมบูรณ์
17. ไฟล์ XML สามารถมีสคีมาของตัวเองหรืออาจมีอยู่ในไฟล์ *.xsl แต่ต้องระบุข้อมูลในโหนดรูทของเอกสาร xml ผ่านแอตทริบิวต์ xmlns ดังที่แสดงด้านล่าง:
<rootelement xmlns="x-schema:scheduledSchema.xsl">
18. การอ่านไฟล์ XML
FileStream myfs=new Filestream(Server.MapPath("xmldtagrid.xml"),FileMode.Open,FileAccess.Read);
StreamReader myreader=new StreamReader(myfs);
ชุดข้อมูล myds=ชุดข้อมูลใหม่();
myds.ReadXml(myreader);
19. การควบคุมการแสดงออกปกติ RegularExpressionValidator
ความหมายสัญลักษณ์
^ ระบุตำแหน่งที่จะเริ่มการตรวจสอบ
$ ระบุจุดสิ้นสุดของเช็ค
[] ตรวจสอบว่าค่าที่ป้อนตรงกับอักขระตัวใดตัวหนึ่งในวงเล็บเหลี่ยมหรือไม่
W อนุญาตให้ป้อนค่าใดก็ได้
d{} "d" ระบุว่าค่าอินพุตเป็นตัวเลข {} ระบุจำนวนครั้งของประเภทข้อมูลที่ระบุ
+ บ่งชี้ว่าองค์ประกอบอย่างน้อยหนึ่งรายการจะถูกเพิ่มในนิพจน์ที่กำลังตรวจสอบ
ตัวอย่าง: รูปแบบอีเมล (มีเครื่องหมาย @ และลงท้ายด้วย .com/.net/.org/.edu)
validationexpression="^[w-]+@[w-]+.(com|net|org|edu)$"
20. ข้อความสำคัญสำหรับการดำเนินการข้อมูลในการควบคุม DataGrid:
คุณสมบัติ: DataKeyField="userid" //Set userid as the primary key of the table. ค่าของฟิลด์นี้ไม่สามารถอัปเดตไปยังฐานข้อมูลได้ วิธีที่ดีที่สุดคือตั้งค่าคีย์หลักของตารางเป็นคีย์หลักของ DataGrid
SqlCommand.Parameters["@userid"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; //ดึงคีย์หลักของแถวที่จะอัปเดต (กำหนดค่าคีย์หลักของแถวที่เลือกในปัจจุบันให้ คำสั่งเป็นพารามิเตอร์
SqlCommand.Parameters["@fname"].Value=((TextBox)e.Item.Cells[2].Controls[0]).Text; //กำหนดค่าแถวที่แก้ไขให้กับพารามิเตอร์
21. การควบคุมแบบกำหนดเอง:
ก. การควบคุมผู้ใช้ (เหมือนกับหน้าการสร้าง ASP)
(I) สร้างเพจ ลากตัวควบคุม และตั้งค่าคุณสมบัติ/วิธีการ คำสั่ง @Control ใน <% @Control Language="C#" Debug="True" %> เพื่อกำหนดเพจนี้จะมีโค้ดควบคุม
(II) บันทึกเป็นไฟล์ *.ascx เช่น a.ascx
(III) ใช้: ส่วนหัว< %@Register Tagprefix="MyFirstControl" TagName="MyLbl" Src="a.axcs" %>
//Tagprefix เป็นคำนำหน้าของตัวควบคุม เช่น ASP:TextBox ใน ASP
//TagName ใช้เพื่อระบุชื่อของตัวควบคุมแบบกำหนดเอง
//Src ระบุแหล่งไฟล์ควบคุม
เนื้อความ: <MyFirstControl:MyLbl runat = "เซิร์ฟเวอร์" id = "AllMine" MyText = "สำเร็จ" />
ข. สร้างการควบคุมแบบกำหนดเองโดยใช้ C#
(I) สร้างไฟล์โค้ดบริสุทธิ์ สืบทอดการควบคุมคลาสพื้นฐาน และบันทึกเป็น *.cs เช่น a.cs
(II) คอมไพล์โค้ดเพื่อสร้างแอสเซมบลี: csc /t:library /r:System.dll,System.Web.Dll a.cs
//library บอกให้คอมไพเลอร์ C# สร้างแอสเซมบลี
// /r:System.dll System.Web.Dll บอกให้คอมไพเลอร์ C# อ้างอิงแอสเซมบลีที่ระบุ
(III) วางไฟล์ dll ที่สร้างขึ้นในไดเร็กทอรี bin
(IV) ใช้: <% @Register TagPrefix="Mine" Namespace="MyOwnControls" Assembly="a" %>
22. ข้อควรระวังสำหรับการควบคุมแบบคอมโพสิต:
คลาสสาธารณะ MyCompositin:Control,INamingContainer //INamingContainer: หากมีหลายอินสแตนซ์ของการควบคุมนี้บนเพจ อินเทอร์เฟซนี้สามารถให้แต่ละอินสแตนซ์ {} มีแฟล็กที่ไม่ซ้ำกัน
this.EnsureChildControls();//ระบุว่าการควบคุมแบบผสมจะเป็นทั้งหมด การควบคุมลูกจะแสดงผลไปยังเพจ วิธีการนี้จะตรวจสอบว่าการควบคุมเซิร์ฟเวอร์มีการควบคุมลูก
CreateChildControls
หรือไม่
23.ปุ่ม/LinkButton/ImageButton/HyperLink จะใช้เมื่อใด?
1.ปุ่มและ ImageButton ใช้เพื่อส่งข้อมูลกลับไปยังเซิร์ฟเวอร์
2.ไฮเปอร์ลิงก์ใช้เพื่อนำทางระหว่างหน้าต่างๆ
3.LinkButton ใช้เพื่อบันทึกข้อมูลไปยังเซิร์ฟเวอร์หรือเข้าถึงข้อมูลบนเซิร์ฟเวอร์
24. การติดตามและการดีบัก
ติดตาม:
1. การติดตามระดับเพจ: รวมคำแนะนำของเพจต่อไปนี้ไว้ที่จุดเริ่มต้นของเพจ <%@ Page Trace="True" TraceMode="SortByCategory/SortByTime" %>
ข้อความที่กำหนดเอง:
Trace.Write("นี่คือสตริงที่จะแสดง");
Trace.Warn("นี่คือสตริงที่จะแสดง"); //เหมือนกับ Trace.Write ยกเว้นว่าแบบอักษรจะเป็นสีแดง
ตรวจสอบว่ามีการใช้การติดตามหรือไม่
ตัวอย่าง: if(Trace.IsEnabled) { Trace.Warn("Tracing is Enabled")}
2. การติดตามระดับแอปพลิเคชัน: <trace Enabled="true" pageOutput="true"/> ในส่วน <System.Web> ของไฟล์ Web.config
25. ตั้งค่าแคช:
1.แคชเอาท์พุต:
I. การตั้งค่าเพจ: เพิ่ม <%@ OutputCache Duration="120" VaryByParam="none" %> ไปยังจุดเริ่มต้นของเพจที่ต้องการแคช
หมายเหตุ: เนื้อหาผลลัพธ์ยังคงไม่เปลี่ยนแปลงภายในสองนาทีสุดท้ายของการร้องขอหน้านี้
II. การตั้งค่าแบบเป็นโปรแกรม:
ส่วนใหญ่ใช้วิธีการภายใต้คลาสSystem.Web.HttpCachePolicyคลาส
(1) Response.Cache.SetExpires(DateTime.Now.AddSeconds(120)); //ต้องระบุเวลาหมดอายุในวิธีนี้ เช่น // ประโยคนี้คือสองนาที
(2) Response.Cache.SetExpires (DateTime.Now.AddSeconds (120));
Response.Cache.SetSlidingExpiration(true); //"การหมดอายุที่ปรับได้" ส่วนใหญ่จะใช้สำหรับสถานการณ์ที่จำนวนการเข้าชมมีมากในตอนแรก แต่จากนั้นจำนวนการเข้าชม // มีความสมดุล
ฟังก์ชั่น: บรรทัดแรกตั้งเวลาหมดอายุของแคช และบรรทัดที่สองจะเปิดการเลื่อนการหมดอายุ (การหมดอายุที่ปรับได้)
2. แคชข้อมูล:
(1).DataView mySource; (2).กำหนดค่าให้กับ mySource;
(3).แคช["myCache"]=mySource; (4).mySource=(DataView)แคช["myCache"]
26. การปรับใช้: คัดลอกโดยตรงไปยังเซิร์ฟเวอร์ผลิตภัณฑ์เพื่อคัดลอกคำสั่ง: XCOPY <source_path> <destination_path> //XOPY ยอมรับเฉพาะเส้นทางทางกายภาพเท่านั้น ไม่ใช่เส้นทางเสมือน