คำชี้แจง: บทความนี้ตีพิมพ์ใน "แอปพลิเคชันคอมพิวเตอร์" เล่มที่ 23 ฉบับที่ 11
บทคัดย่อ: ในการพัฒนาระบบต่างๆ การใช้ Stored Procedure ถือเป็นนิสัยที่ดี ซึ่งไม่เพียงแต่นำคุณลักษณะต่างๆ เช่น ตารางชั่วคราว ฟังก์ชัน และเคอร์เซอร์มาด้วยเท่านั้น แต่ยังรวมถึง การดีบัก การอัพเกรด และการบำรุงรักษากลายเป็นเรื่องง่าย อย่างไรก็ตาม การเรียกโพรซีเดอร์ที่เก็บไว้เกือบทั้งหมดอยู่ในโหมดเดียวกัน และข้อแตกต่างที่สำคัญก็คือ พารามิเตอร์ของโพรซีเดอร์ที่เก็บไว้แต่ละโพรซีเดอร์แตกต่างกัน ดังนั้น เป็นไปได้หรือไม่ที่จะใช้วิธีการเพื่อรวมการเรียกโพรซีเดอร์ที่เก็บไว้ทั้งหมดและลดการเขียนโปรแกรมที่ไม่จำเป็น? จากการศึกษาฐานข้อมูล SQL Server และ ASP.NET เราได้ใช้วิธีการโทรแบบครบวงจร วิธีการนี้จำเป็นต้องระบุชื่อของขั้นตอนการจัดเก็บที่จะเรียกใช้เท่านั้น และระบุค่าพารามิเตอร์เฉพาะเมื่อทำการโทร เพื่อให้มีการจัดเก็บใด ๆ สามารถเรียกขั้นตอนได้
คำสำคัญ: ขั้นตอนการจัดเก็บ ตารางระบบ มุมมองโครงสร้างข้อมูล รหัสประจำตัวเอกสาร ADO.NET: ② รายงานผลสัมฤทธิ์ทางเทคนิคเชิงปฏิบัติ (เทคโนโลยี) สรุปการเรียนรู้เชิงทฤษฎีและการปฏิบัติทางสังคม (สังคมศาสตร์)
เรียกกระบวนงานที่เก็บไว้ในลักษณะเดียวกันใน .NET
บทคัดย่อ: การใช้ Stored Procedure เป็นนิสัยที่ดีในการพัฒนาโปรเจ็กต์ มันมีตารางชั่วคราว ฟังก์ชัน และเคอร์เซอร์ และการดีบัก การอัพเกรด และการบำรุงรักษาก็สามารถได้รับประโยชน์จากมันเช่นกัน อย่างไรก็ตาม การเรียกไปยัง Stored Procedure เกือบทั้งหมดก็มีรูปแบบเดียวกัน ความแตกต่างระหว่างพารามิเตอร์เหล่านี้คือพารามิเตอร์ของ Stored Procedure ทั้งหมด ดังนั้นเราสามารถเรียก Stored Procedure ในลักษณะเดียวกันได้แม้จะมีความแตกต่างกันและลดโค้ดโปรแกรมลงก็ตาม ชื่อโพรซีเดอร์ที่เก็บไว้และค่าของพารามิเตอร์ คุณไม่จำเป็นต้องสร้างพารามิเตอร์ด้วยตัวเอง คำสำคัญ: Stord Procedure, System table, Information Schema, ADO.NET
สรุป: ในการพัฒนาโครงการ คุณมักจะเรียก ขั้นตอนการจัดเก็บ อย่างไรก็ตาม การเรียกกระบวนงานที่เก็บไว้เกือบทั้งหมดจะอยู่ในรูปแบบเดียวกัน ความแตกต่างหลักอยู่ที่ประเภทและค่าของแต่ละพารามิเตอร์ที่สร้างขึ้น เป็นไปได้ไหมที่จะเรียกโพรซีเดอร์ที่เก็บไว้ทั้งหมดผ่านฟังก์ชันเดียว (หรือคลาส)? บทความนี้ใช้วิธีการโทรแบบรวมตามหลักการของการใช้ตารางระบบที่ฐานข้อมูลจัดเตรียมไว้ วิธีการนี้จำเป็นต้องระบุชื่อของขั้นตอนการจัดเก็บที่จะเรียกใช้เท่านั้น และระบุค่าพารามิเตอร์เฉพาะเมื่อทำการโทร เพื่อที่จะได้ สามารถเรียก Stored Procedure ได้
บทคัดย่อ: เราต้องเรียก Stored Procedure ของระบบฐานข้อมูลในระหว่างการพัฒนาโครงการ อย่างไรก็ตาม การเรียก Stored Procedure นั้นแทบจะเหมือนกัน ความแตกต่างที่สำคัญคือความแตกต่างระหว่างประเภทหรือค่าของพารามิเตอร์ เป็นต้น เราสามารถเรียก Stored Procedure ผ่านทาง ฟังก์ชั่น (หรือคลาส) ขึ้นอยู่กับตารางระบบที่จัดทำโดยระบบฐานข้อมูล เราเขียนคลาสเพื่อเรียกกระบวนงานเก็บไว้ ในบทความนี้ พารามิเตอร์เดียวที่คุณระบุคือชื่อของกระบวนงานที่เก็บไว้และ ค่าของพารามิเตอร์ทั้งหมดของขั้นตอนการจัดเก็บ
<คลาส DIV=ข้อความ4>1. บทนำ
Private void GetProcedureParameter(พารามิเตอร์ params object[])
{ SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection
= this.myConnection;
= '" + this.ProcedureName + "' เรียงลำดับตาม ORDINAL_POSITION";
SqlDataReader reader = null; reader = myCommand2.ExecuteReader(); // สร้างพารามิเตอร์ส่งคืน
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter SqlDbType = SqlDbType.Int;
myParameter.Direction = parameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
// สร้างแต่ละพารามิเตอร์ได้ที่นี่
ในขณะที่ (reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = reader["PARAMETER_NAME"].ToString();
myParameter.Direction = reader["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString()) {
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i] ;
myParameter.SqlDbType = SqlDbType.Int;
break; //...การ
ประมวล
ผลประเภทเฉพาะจำนวนมากถูกละไว้
: break; }
i++
;
3.2 ส่งกลับชุดข้อมูลผลลัพธ์ ค่าส่งคืน และชุดพารามิเตอร์ขาออก หลังจากสร้างพารามิเตอร์ของกระบวนงานที่เก็บไว้แล้ว เราก็สามารถเรียกขั้นตอนที่เก็บไว้ได้ เนื่องจากใน .NET คลาสที่ใช้กันทั่วไปที่ส่งกลับชุดผลลัพธ์คือ SqlDataReader และ DataSet และ SqlDataReader สามารถใช้ได้ในขณะที่รักษาการเชื่อมต่อไว้เท่านั้น แต่ DataSet ไม่ได้ใช้ ในการใช้งานของเรา การเชื่อมต่อควรถูกตัดการเชื่อมต่อหลังการโทร ดังนั้นชุดข้อมูลจึงถูกใช้เพื่อบันทึกชุดผลลัพธ์ที่ส่งคืน
public SqlResult Call(พารามิเตอร์ params object[]){ // SqlResult เป็นคลาสที่กำหนดด้วยตนเองซึ่งใช้ในการบันทึกชุดข้อมูลผลลัพธ์ ค่าที่ส่งคืน และชุดพารามิเตอร์ขาออก SqlResult result = new SqlResult(); // กำหนดการเชื่อมต่อของคุณเองเป็น จำเป็นต้องใช้ String
myConnection = new SqlConnection(ConnectionString);
myCommand = new SqlDataAdapter(myCommand.Open();
myCommand.CommandType
=
CommandType.StoredProcedure;
จัดเก็บพารามิเตอร์ของขั้นตอนและตั้งค่า
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table"); // รับค่าพารามิเตอร์ขาออกและคู่ชื่อของขั้นตอนที่เก็บไว้และบันทึกไว้ใน Hashtable GetOutputValue(); // ปล่อยทรัพยากรต่างๆ ที่นี่ และยกเลิกการเชื่อมต่อ
myAdapter.Dispose();
myCommand.Dispose()
;
myConnection.Dispose()
;
4. การทำงานเพิ่มเติม แม้ว่าการใช้งานของเราที่นี่มีไว้สำหรับฐานข้อมูล SQL Server แต่วิธีนี้สามารถใช้กับฐานข้อมูลใดๆ ที่ให้มุมมองโครงสร้างข้อมูล สอดคล้องกับมาตรฐาน ANSI-92 หรือให้ข้อมูลเมตา เรารวมมันไว้ในคลาส SqlProcedure และสามารถเรียกโพรซีเดอร์ที่เก็บไว้ได้อย่างง่ายดายเมื่อจำเป็น ซึ่งช่วยลดงานโค้ดที่ซ้ำซ้อนโดยทั่วไปได้มาก เพื่อให้คลาส SqlProcedure รองรับชนิดข้อมูลมากขึ้น ในเมธอด GetProcedureParameter() คุณต้องวิเคราะห์ประเภท ทิศทาง ความยาว ค่าเริ่มต้น และข้อมูลอื่น ๆ ของแต่ละพารามิเตอร์ตามความต้องการของคุณ จากนั้นจึงสร้างพารามิเตอร์นี้ โดยพื้นฐานแล้วทุกประเภทสามารถนำไปใช้ได้ แม้กระทั่งประเภทรูปภาพก็สามารถสร้างได้ด้วยวิธีนี้ วิธีนี้ทำให้ชั้นเรียนมีความทั่วไปและมีประโยชน์ในทุกโปรเจ็กต์
อ้างอิง
(1) Ray Rankins, Paul Jensen, Paul Bertucci, หนังสือเชิงปฏิบัติ SQL Server 2000, ปักกิ่ง: สำนักพิมพ์อุตสาหกรรมอิเล็กทรอนิกส์, 2545
[2] ห้องสมุด MSDN มกราคม 2546, Microsoft Corporation
เกี่ยวกับผู้แต่ง: Liu Zhibo (1979-) ชายจาก Xinhua, Hunan, ปริญญาโท, ทิศทางการวิจัยหลัก: โครงข่ายประสาทเทียมและการจดจำรูปแบบ, ระบบข้อมูลอัตโนมัติในสำนักงาน
อีเมล: [email protected]