เปลี่ยนคลาสพื้นฐานของการTableAdapterในชุดข้อมูลที่พิมพ์
รหัสเพื่อสร้าง และสร้างชุดข้อมูลที่พิมพ์
ชนิดชุดข้อมูลช่วยให้คุณสามารถสร้างDataTableที่มีชนิดข้อมูลสําหรับแต่ละคอลัมน์ที่ขึ้นอยู่กับ SQL หรือTableAdapterที่ง่ายการโต้ตอบข้อมูลกับ DB ที่ขึ้นอยู่กับชนิดข้อมูลที่พิมพ์
เนื่องจากวัตถุประสงค์คือไม่สร้างชุดข้อมูลที่พิมพ์ที่นี่, ขอได้อย่างรวดเร็วสร้างชุดข้อมูลกับฐานข้อมูลและตารางพร้อมสําหรับตอนนี้. นอกจากนี้คุณยังสามารถทําสิ่งที่คุณต้องการจัดวางโต๊ะ
ขั้นตอนแรกคือการเพิ่มเป็นชุดข้อมูลเป็นสินค้าใหม่ในโครงการของคุณ ชื่อเป็นอะไรแต่เหลือไว้ที่นี่
เปิดชุดข้อมูล และเพิ่มตัวปรับต่อตารางจากตัวออกแบบ
ทําตามตัวช่วยสร้างเพื่อสร้างตารางข้อมูลและตารางอะแดปเตอร์
ผมคิดว่ารูปแบบต่อไปนี้อาจจะมีตัวอย่างของการเรียกและการใช้ระเบียนจากฐานข้อมูลโดยใช้ DataTable และ TableAdapter ที่คุณสร้างขึ้น (นี่เป็นเพียงตัวอย่าง)
public Form1()
{
InitializeComponent();
using (var adapter = new 金額集計TestTableAdapter())
{
var table = adapter.GetData();
foreach (var row in table)
{
Trace.WriteLine(string.Format("{0}:{1}", row.年月, row.金額));
}
}
}
โดยทั่วไป โครงการที่ใช้ชุดข้อมูลนี้มีตารางน้อยกว่าหนึ่ง และคุณสร้างหลายชุดข้อมูลที่รวมจํานวนของตารางหรือหลายตาราง ผมคิดว่ามันเป็นลักษณะทั่วไปของการประมวลผลที่จะเกิดขึ้นเมื่อมันเกิดขึ้น ตัวอย่างเช่น คุณอาจต้องการเปลี่ยน SQL ที่ใช้ภายในเพื่อเปลี่ยนแปลงเงื่อนไขสําหรับการเรียกระเบียนแบบไดนามิก
อย่างไรก็ตาม การTableAdapterคลาสที่สร้างขึ้นจากชุดข้อมูลถูกสร้างขึ้นโดยอัตโนมัติโดยรหัส นอกจากนี้ เนื่องจากคลาสนี้TableAdapterสืบทอดคลาสคอมโพเนนต์ ไม่มีวิธีการหรือคุณสมบัติที่สามารถใช้ในจริงทั่วไป คุณไม่สามารถส่งผ่านคลาสพื้นฐานไปยังวิธีการเรียกการดําเนินการที่เกี่ยวข้องกับตารางอะแดปเตอร์
นอกจากนี้ SQL ใช้ภายใน sqldataadapter ใช้ในการเข้าถึงฐานข้อมูลฯลฯมีการประกาศในการป้องกันดังนั้นคุณไม่สามารถสัมผัสพวกเขาจากภายนอก
อย่างไรก็ตาม ตามที่คุณประกาศสําหรับวิธีการและคุณสมบัติที่ประกาศในการป้องกัน คุณสามารถสัมผัสได้ โดยการสร้างคลาสที่สืบทอดคลาสTableAdapter และนี้TableAdapterคลาสมีบางส่วนปรับเปลี่ยน ดังนั้นคุณสามารถประกาศวิธีการหรือคุณสมบัติอื่นเพื่อขยายกระบวนการ คุณยังสามารถสร้างคุณสมบัติใหม่เพื่อรับคุณสมบัติภายใน ดังในรหัสต่อไปนี้:
using System.Data.SqlClient;
namespace DataSetBaseAdapter {
public partial class DataSet1 {
}
}
namespace DataSetBaseAdapter.DataSet1TableAdapters
{
public partial class 金額集計TestTableAdapter
{
public SqlDataAdapter InnerAdapter
{
get { return Adapter; }
}
}
}
คุณสามารถใช้ TableAdapter นี้จริงเพื่อดูว่า คุณมีการเข้าถึงคุณสมบัติเพิ่มเติม
อย่างไรก็ตาม การเข้าถึงคุณสมบัติภายในไม่ได้หมายความว่า กระบวนการเป็นปกติ และคุณยังคงต้องเขียนรหัสสําหรับแต่ละชุดข้อมูลที่คุณสร้าง
เปลี่ยนคลาสพื้นฐานของตัวปรับต่อ
ดังที่ได้กล่าวไว้ก่อนหน้านี้ ถ้าคุณเปลี่ยนส่วนของรหัสที่สืบทอดคลาส รหัสถูกสร้างขึ้นโดยอัตโนมัติ ดังนั้น การปรับปรุง DataSet อีกครั้งส่งกลับรหัส หากคุณสามารถเขียนคลาสบางส่วนที่สืบทอดอินเทอร์เฟซในไฟล์แยกต่างหาก แต่มันไม่สมเหตุสมผลมากนักเพราะคุณต้องเขียน TableAdapters มากเท่าที่คุณสร้างขึ้นมา
ในความเป็นจริงมีกลไกการเปลี่ยนแปลงคลาสที่สืบทอดของ TableAdapter นี้ ผมอยากจะอธิบายขั้นตอน
ขั้นแรกให้สร้างชั้นเรียนที่คุณต้องการสืบทอด TableAdapter เดิมสืบทอดคลาส Component ดังนั้นคุณควรสืบทอดคลาสคอมโพเนนต์แม้ว่าคุณสร้างขึ้น ฉันจะเขียนรหัสที่ฉันต้องการแบ่งปันที่นี่ แต่ฉันจะเขียนชั้นเรียน จับคู่เนมสเปซกับสิ่งที่คุณสร้าง
using System.ComponentModel;
namespace DataSetBaseAdapter
{
public class BaseAdapter : Component
{
}
}
จากนั้นเปิดตัวออกแบบชุดข้อมูล และเลือกตัวปรับต่อตารางที่คุณสร้างขึ้น
คลิกขวาเพื่อเปิดคุณสมบัติ มีคุณสมบัติที่เรียกว่า BaseClass ซึ่งในขั้นต้นควรเป็น "System.ComponentModel.Component" เขียนใหม่นี้ไปยังชั้นเรียนที่คุณเพิ่งสร้างขึ้น ฉันจะเขียนทุกอย่าง รวมทั้งเนมสเปซ
ถ้าคุณบันทึกคุณจะเห็นว่า คลาสพื้นฐานของ TableAdapter มีการเปลี่ยนแปลง โดยการตั้งค่านี้ในแต่ละ TableAdapter คุณสามารถเขียนการประมวลผลทั่วไปไปยังคลาสพื้นฐาน
ตัวอย่างเช่น ถ้าคุณต้องการเข้าถึง SQL ภายในหรือ SQLDataAdapter เขียน: อะแด็ปเตอร์และ CommandCollection ที่สร้างขึ้นโดยอัตโนมัติเป็นคุณสมบัติที่สร้างโดยคลาส inheritor เท่านั้น รหัสต่อไปนี้ใช้การสะท้อนเพื่อบังคับให้เข้าถึง
using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;
namespace DataSetBaseAdapter
{
public class BaseAdapter : Component
{
public SqlDataAdapter InnerAdapter
{
get
{
return (SqlDataAdapter)GetType().GetProperty("Adapter",
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
}
}
public SqlCommand[] InnerCommandCollection
{
get
{
return (SqlCommand[])GetType().GetProperty("CommandCollection",
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
}
}
}
}
คุณสามารถดูได้ว่า คุณสามารถใช้ TableAdapter ในการเข้าถึงคุณสมบัติของคลาสที่สืบทอดจริง