在實際操作中,流水號的需求是非常大的。比方說,我們經常希望訂單號碼或是訂單上各個產品的順序編號自動依次遞增而不需要人工輸入,當您遇到此類需求時,千萬不要一時沖動而想以程序代碼來解決,因為只要使用自動編號字段,萬事大吉!
ADO.NET並沒有額外提供所謂的自動編號數據類型。欲使一個字段成為自動編號字段,您必須進行下列設置:
◆首先,字段的數據類型必須是Int16、Int32或Int64。如果字段的數據類型不是這三者,則會將DataType屬性強制設置為Int32。
◆欲使一個字段成為自動編號字段,您必須將其AutoIncrement屬性設置成true。
◆自動編號字段的內容其實都是整數,只不過每當您新增一筆數據行時,ADO.NET會自動去遞增最後一筆數據行的自動編號字段的內容,並將遞增後的結果填入新數據行的自動編號字段中,它不需要由您輸入。
然而正由於是靠ADO.NET自動替您遞增並填入,您必須使用AutoIncrementSeed屬性來設置自動編號字段的種子(Seed),並使用AutoIncrementStep屬性來設置自動編號字段的遞增值(Increment),以便讓ADO.NET有所遵循。所謂的“種子”,就是第一筆被新增至數據表之數據行的自動編號字段內容。至於“遞增值”,則是每次固定要自前一筆數據行的自動編號字段內容遞增多少。種子的默認值是0,遞增值的默認值是1。
比方說,如果您將種子與遞增值設置成1,則從第一筆開始的各筆數據行的自動編號字段內容將會是1、2、3、4……。又例如,如果您將種子與遞增值分別設置成1與3,則從第一筆開始的各筆數據行的自動編號字段內容將會是1、4、7、10……。
◆由於不需要自行於自動編號字段中輸入數據,因此建議您將自動編號字段的ReadOnly屬性設置成true。
程序范例
圖 5-8
圖 5-8是程序范例CH5_DemoForm004.cs的執行畫面,很顯然,“章立民研究室”數據表的“員工號碼”字段是一個種子為10000、遞增值為5的自動編號字段。相關程序代碼編寫於窗體的Load事件處理函數中,摘要列示如下:
private void CH5_DemoForm004_Load(object sender, EventArgs e)
{
...
// 建立"員工號碼"字段。
DataColumn colEmployeeId=
myTable.Columns.Add("員工號碼", System.Type.GetType("System.Int32"));
// 定義"員工號碼"字段的架構。
/****************************************/
// 設置"員工號碼"字段是一個自動編號字段。
colEmployeeId.AutoIncrement=true;
// 將自動編號字段的種子設置成 10000。
colEmployeeId.AutoIncrementSeed=10000;
// 將自動編號字段的遞增值設置成 5。
colEmployeeId.AutoIncrementStep=5;
/****************************************/
...
}