บทนำสู่ SQL-DMO
ปัจจุบัน Microsoft SQL Server เป็นระบบการจัดการฐานข้อมูลยอดนิยม ด้วยการปรับปรุงอย่างต่อเนื่องและการพัฒนา SQL Server และการผสมผสานที่สมบูรณ์แบบกับระบบปฏิบัติการ Windows Series ของ Microsoft ทำให้ประสิทธิภาพและความสะดวกในการใช้งานบนแพลตฟอร์ม Windows ดังนั้นจึงมีมูลค่าเพิ่มขึ้นเรื่อย ๆ ชื่อเต็มของ SQL-DMO คือวัตถุการจัดการแบบกระจาย SQL มันเป็นคอลเลกชันที่มีชุดของ Coms ที่มีอินเทอร์เฟซคู่ ผ่าน SQL-DMO เราสามารถควบคุมเอ็นจินฐานข้อมูลและการจัดการการจำลองแบบที่ทำงาน SQL Server เนื่องจาก SQL-DMO เป็นชุดของ COM จึงสามารถใช้เครื่องมือพัฒนาใด ๆ ที่สามารถใช้ COM รวมถึง VB, Delphi, VC, BCB, ASP ฯลฯ เครื่องมือพัฒนาเกือบทั้งหมดภายใต้แพลตฟอร์ม Windows
SQL-DMO ใช้
ทำไมเราต้องใช้ SQL-DMO เพื่อจัดการฐานข้อมูล ไม่เพียงพอที่เราจะจัดการฐานข้อมูลโดยใช้สคริปต์ Enterprise Manager และ T-SQL หรือไม่? SQL-DMO สามารถดำเนินกิจกรรมการจัดการฐานข้อมูลที่ยืดหยุ่นปรับแต่งได้และมีประสิทธิภาพ เนื่องจาก SQL-DMO จัดให้มีอินเทอร์เฟซการจัดการสำหรับ SQL Server ผ่านการเขียนโปรแกรมคุณสามารถปรับแต่งกิจกรรมการจัดการตามความต้องการของคุณ ตัวอย่างเช่นหากเราจัดการองค์กรขนาดใหญ่ที่มีอินสแตนซ์ SQL Server จำนวนมาก ตอนนี้คุณต้องเพิ่มผู้ใช้ในอินสแตนซ์ SQL Server ทั้งหมดในองค์กรของคุณ คุณใช้การเขียนโปรแกรม SQL-DMO เพื่อใช้การโทรสามารถทำได้อย่างง่ายดายและมีประสิทธิภาพด้วยรอบหนึ่ง ในความเห็นของผู้เขียนสิ่งที่สำคัญกว่าคือ MSDE สามารถจัดการได้โดยใช้ SQL-DMO MS SQL Server มีราคาแพงในขณะที่ MSDE ฟรี ในแอพพลิเคชั่นขนาดเล็กและขนาดกลาง MSDE ก็เพียงพอแล้ว อย่างไรก็ตามเนื่องจาก MSDE มีเพียงเอ็นจิ้นฐานข้อมูล แต่ไม่ได้ให้อินเทอร์เฟซการจัดการภาพจึงเป็นไปไม่ได้ที่จะจัดการฐานข้อมูลใน MSDE เป็นประจำซึ่ง จำกัด ขอบเขตของการใช้งานของ MSDE ในเวลานี้ถ้าเราใช้ SQL-DMO เราสามารถให้อินเทอร์เฟซการจัดการฐานข้อมูลของเราเองเพื่อให้เราสามารถทำการจัดการฐานข้อมูลตามปกติใน MSDE หากไม่ได้รับการพิจารณาถึงเวลาและค่าใช้จ่ายคุณสามารถสร้างอินเทอร์เฟซการจัดการที่คล้ายกับของ Enterprise Manager ในความเป็นจริงฟังก์ชั่นส่วนใหญ่ของ Enterprise Manager จะถูกนำมาใช้โดยใช้ SQL-DMO (ใช้ SQL-NS (SQL-Namespace ซึ่งเป็นคอลเลกชัน Object COM ที่ให้การเข้าถึงพื้นที่ชื่อวัตถุใน SQL Server) แต่ SQL-NS เองก็ถูกสร้างขึ้นบน SQL-DMO)
โฮสต์และองค์ประกอบ SQL-DMO
โฮสต์ของ SQL-DMO คือ SQLDMO.dll อยู่ภายใต้ X:/โปรแกรมโปรแกรม/Microsoft SQL Server/80/Tools/Binn นอกจากนี้ยังต้องการไฟล์ต่อไปนี้: l
Sqldmo.dll ( ไลบรารีประเภทหลัก) l
sqldmo.rll ( ไฟล์ทรัพยากรภาษา) L
SQLSVC.DLL ( ประเภทไลบรารีสำหรับการจัดการฐานข้อมูล) L
SQLSVC.RLL ( ไฟล์ทรัพยากรภาษา) L
SQLUNIRL .DLL (
เลเยอร์การเปลี่ยนเส้นทาง Unicode ) L
SQLRSLD.DLL ( สำหรับการโหลดทรัพยากร) L
ODBC ( รวมถึง ODBC32.DLL, SQLSRV32.DLL, ODBCBCP.DLL ฯลฯ ) นี่คือคำอธิบายของโครงสร้างการโทร (รูปที่ 1):
| แอปพลิเคชันของเราสร้าง วัตถุ โดยใช้ SQL-DMO ที่นี่ |
รูปที่ 1 โครงสร้างการโทร SQL-DMO
แผนผังวัตถุ SQL-DMO
ก่อนอื่นให้ดูที่ต้นไม้วัตถุขนาดใหญ่และซับซ้อนของ SQL-DMO (ดูรูปที่ 3): วัตถุ SQLServer เป็นกระดูกสันหลังของต้นไม้วัตถุนี้และมีสาขาหลักสามสาขาภายใต้กระดูกสันหลังนี้: L ฐานข้อมูล L และชุดของการใช้งานวัตถุ ภายใต้สถาปัตยกรรมฐานข้อมูลและงานการบำรุงรักษาใน SQLServer L Jobserver Branch, ชุดของวัตถุภายใต้มันใช้บริการ SQL Server Agent (Agent) L Branch การจำลองแบบชุดของวัตถุภายใต้การใช้บริการการจำลองแบบของ SQL Server นอกจากนี้ยังมีสิ่งที่ต้องสังเกต: l ต้นไม้วัตถุไม่ได้แสดงรายการวัตถุแอปพลิเคชัน แต่นี่เป็นวัตถุที่ค่อนข้างสำคัญ วัตถุ SQL-DMO ใด ๆ ที่มีคุณสมบัติชี้ไปที่วัตถุแอปพลิเคชัน วัตถุแอปพลิเคชันแสดงถึงแอปพลิเคชันส่วนกลางซึ่งมีวัตถุคอลเลกชันสองรายการ: เซิร์ฟเวอร์และกลุ่มเซิร์ฟเวอร์ ดังที่แสดงในรูปที่ 2: รูปที่ 2 แอปพลิเคชันวัตถุวัตถุ L Tree Object Tree แสดงโครงสร้างของ SQL-DMO เท่านั้นและไม่ได้แสดงรายการวัตถุทั้งหมดเช่นวัตถุ Namelist วัตถุ ServerGroup ฯลฯ แผนผังวัตถุ SQL-DMO มีโครงสร้างที่ซับซ้อนและวัตถุจำนวนมาก รูปที่ 3 แผนผังวัตถุ SQL-DMO
การดำเนินการของ Delphi Encapsulated SQL-DMO
ต่อไปนี้เป็นคำอธิบายของส่วนประกอบ TDBCTRL สำหรับการห่อหุ้ม SQL-DMO ที่ดำเนินการโดยผู้เขียนโดยใช้ Delphi เนื่องจากฉันต้องการเอ็นจิ้นฐานข้อมูลฟรีในโครงการบางโครงการในที่สุดฉันก็เลือก MSDE แต่ MSDE ไม่มีอินเทอร์เฟซการจัดการจึงเป็นแค่เอ็นจิ้น ดังนั้นจึงมีความจำเป็นที่จะต้องให้อินเทอร์เฟซการจัดการที่ง่ายและชัดเจนสำหรับ MSDE เราไม่จำเป็นต้องจัดเตรียมฟังก์ชั่นการจัดการให้มากที่สุดเท่าที่ผู้จัดการองค์กรเราเพียงแค่ต้องให้ฟังก์ชั่นที่ใช้กันมากที่สุด เมื่อพิจารณาถึงความสะดวกในการใช้งานและปรับขนาดได้มีการตัดสินใจที่จะให้มันในรูปแบบของส่วนประกอบ ส่วนประกอบที่นำไปใช้จะให้ชั้นของบรรจุภัณฑ์สำหรับ SQL-DMO ห่อหุ้มฟังก์ชั่นที่ใช้กันทั่วไปบางอย่างและทำให้การใช้งานง่ายขึ้น โปรดทราบว่าการรวบรวมส่วนประกอบนี้จำเป็นต้องแนะนำไลบรารีประเภท SQL-DMO และสร้างรหัสคำอธิบายที่สอดคล้องกัน รหัสมีการใช้งานปกติของ Delphi จำนวนมากและสัญกรณ์สำนวนของวัตถุ COM ฉันจะไม่พูดถึงวิธีที่ Delphi ใช้ com ที่นี่ผู้อ่านสามารถอ้างถึงหนังสือที่เกี่ยวข้อง ส่วนประกอบนี้มีคุณสมบัติต่อไปนี้: โฮสต์คุณสมบัติ: สตริงอ่าน fhost เขียน fhost; // ชื่อโฮสต์นั่นคือชื่ออินสแตนซ์เซิร์ฟเวอร์ SQL ที่จะเชื่อมต่อรหัสผ่านคุณสมบัติ: สตริงอ่าน fpwd เขียน fpwd; Ogin: String Read Flogin เขียน flogin; สมาชิกข้อมูลส่วนตัว: SQLServer เพื่อบันทึก ประเภทของมันคือ _sqlservr ตัวสร้างคือการเชื่อมต่อเพื่อสร้างวัตถุ SQLServer Destructor ยังเป็นเพียงการทำลายวัตถุ SQLServer ให้เสร็จสมบูรณ์ constructor tdbctrl.create (aowner: tcomponent); หลังจากนั้น Delphi จะทำการทำลายวัตถุ COM ที่อยู่เบื้องหลัง สืบทอดมา; สิ้นสุด; หากเราต้องการจัดการและใช้งานอินสแตนซ์ SQL Server ที่แน่นอนเราต้องเชื่อมต่อกับอินสแตนซ์นี้ก่อน ฟังก์ชั่น ConnectToserver ต่อไปนี้ใช้ฟังก์ชั่นของวิธีการเชื่อมต่อกับอินสแตนซ์ SQL Server ฟังก์ชั่น tdbctrl.connecttoserver: บูลีน; ผลลัพธ์: = จริง; ขึ้นอยู่กับการอนุญาตผู้ใช้ที่เข้าสู่ระบบ) วิธีการบางอย่างที่แสดงไว้ด้านล่างแสดงคุณสมบัติบางอย่าง วิธี getTableList ได้รับชื่อตารางทั้งหมดของฐานข้อมูลและส่งคืนพวกเขาใน tStringList ฟังก์ชั่น TDBCTRL.GETTABLELIST (DBNAME: String; VAR TABLELIST: TSTRINGLIST): BOOLEAN; VAR NOWDB: _Database; .databases.item (dbname, sqlserver); // รับวัตถุฐานข้อมูลตามชื่อฐานข้อมูลสำหรับ i: = 1 ถึง nowdb.tables.count เริ่มต้นตอนนี้: = nowdb.tables.item (i, 0); D (Nowtable .Name); มุมมองทั้งหมดในฐานข้อมูล (มุมมอง), ฟิลด์ทั้งหมดของตารางหรือมุมมอง (คอลัมน์), กลุ่มไฟล์ข้อมูลทั้งหมดของฐานข้อมูลและไฟล์ข้อมูล (ไฟล์กลุ่ม, dbfiles) ฯลฯ สิ่งเหล่านี้สามารถอ้างถึงโครงสร้างโครงสร้างวัตถุโดยเฉพาะของโครงสร้าง SQL-DMO การใช้วัตถุ SQL-DMO สามารถทำตามขั้นตอนพื้นฐานต่อไปนี้: รับวัตถุหรือวัตถุคอลเลกชันผ่านวัตถุเลเยอร์ด้านบนจากนั้นใช้วัตถุหรือรับวัตถุในวัตถุคอลเลกชันก่อนใช้งาน โดยทั่วไปหากเป็นวัตถุคอลเลกชันมีวิธีการรายการและวัตถุสมาชิกคอลเลกชันสามารถส่งคืนได้ตามดัชนีหรือชื่อ ควรสังเกตว่าดัชนีเริ่มต้นที่ 1 แทน 0 วิธีการข้างต้นทั้งหมดแสดงให้เห็นถึงวิธีการรับข้อมูลจากฐานข้อมูลถัดไป วิธีนี้แสดงวิธีรักษาฐานข้อมูล ฟังก์ชั่น tdbctrl.backupdb (dbname, backupfile: string): boolean; // พารามิเตอร์ที่ผ่านมาเป็นชื่อฐานข้อมูลที่จะสำรองข้อมูลและชื่อไฟล์สำรองข้อมูล var dmoback: _backup; อุปกรณ์เริ่มต้น // ตั้งค่าอุปกรณ์สำรองให้ DELETEFILE (BackupFile); = dbname+'bak'; ที่นี่จะไม่ส่งคืนค่าไม่มีทางคุณสามารถคิดได้ว่ามีการเพิ่มข้อยกเว้นเนื่องจากชุดสำรองข้อมูลมีอยู่แล้ว; = dbname+'bak'; Nil; e nd; end; นอกจากนี้ฉันต้องการให้ตัวอย่างอธิบายวิธีการใช้วัตถุแอปพลิเคชันที่กล่าวถึงในตอนต้น วิธีนี้คือการได้รับชื่อทั้งหมดที่มีอยู่ (นั่นคือสามารถเข้าถึงได้และเชื่อมต่อได้) อินสแตนซ์ SQL Server ฟังก์ชั่น tdbctrl.getServerList (VAR ServerList: TSTRINGLIST): BOOLEAN; VAR APP: _Application; ; จุดสิ้นสุด; สิ้นสุด; . ผู้อ่านสามารถอ้างถึงรหัสตัวอย่างและหนังสือออนไลน์ของ SQL Server เพื่อเรียนรู้จากตัวอย่างหนึ่งและใช้ฟังก์ชั่นที่ต้องการ หากคุณต้องการรหัสทั้งหมดสำหรับส่วนประกอบนี้คุณสามารถถามฉันได้
คำแนะนำอื่น ๆ
เวอร์ชัน 2000 ของ SQL-DMO เข้ากันได้อย่างสมบูรณ์กับ SQL Server7.0 และ SQL Server 2000 อย่างไรก็ตามมีอินเทอร์เฟซใหม่มากกว่า 80 ตัวเพื่อรองรับคุณสมบัติใหม่ของ SQL Server 2000 อินเทอร์เฟซใหม่เหล่านี้ทั้งหมดจบลงด้วย "2" ซึ่งเป็น supersets ของอินเทอร์เฟซเหล่านั้นใน SQL Server 7.0 ดั้งเดิม กล่าวคือหากคุณต้องการใช้คุณสมบัติใหม่ของ SQL Server 2000 คุณต้องใช้อินเทอร์เฟซกับ "2" ในตอนท้าย
บรรณานุกรม
l Microsoft MSDNL Microsoft SQL Server Online Bookl "Delphi Com Programming เชิงลึก" (US) Eric Harmon Machinery Industry Industry Press