1.4 公共類設(shè)計(jì)
在開(kāi)發(fā)項(xiàng)目中以類的形式來(lái)組織、封裝一些常用的方法和事件,不僅可以提高代碼的重用率,也大大方便了代碼的管理。本系統(tǒng)中創(chuàng)建了5個(gè)公共類,分別為DataCon類、DataOperate類、SoftReg類、VideoOperate類和PelcoD類。其中,DataCon類用來(lái)訪問(wèn)Microsoft Access 2003數(shù)據(jù)庫(kù),DataOperate類用來(lái)操作Microsoft Access 2003數(shù)據(jù)庫(kù),SoftReg類用來(lái)實(shí)現(xiàn)生成機(jī)器碼和系統(tǒng)注冊(cè)功能,VideoOperate用來(lái)封裝視頻采集卡中的各種枚舉和API函數(shù),PelcoD類用來(lái)實(shí)現(xiàn)Pelco-D協(xié)議。在程序開(kāi)發(fā)時(shí),窗體只需調(diào)用相應(yīng)的方法即可。下面分別對(duì)這5個(gè)類中的方法進(jìn)行詳細(xì)介紹。
1.4.1 DataCon類
DataCon類中,因?yàn)楸鞠到y(tǒng)使用的是Microsoft Access 2003數(shù)據(jù)庫(kù),所以在命名空間區(qū)域內(nèi)引用using System.Data.OleDb來(lái)連接數(shù)據(jù)庫(kù)。該類中定義了一個(gè)getCon()方法,該方法用來(lái)使用OleDbConnection對(duì)象連接Access數(shù)據(jù)庫(kù)。GetCon()方法的主要代碼如下:
例程01 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\DataCon.cs
public OleDbConnection getCon()
{
string strDPath = Application.StartupPath;
string strDataSource = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ strDPath.Substring(0, strDPath.LastIndexOf("\\")).Substring(0, strDPath.Substring(0, strDPath. LastIndexOf("\\")).LastIndexOf("\\")) + "\\DataBase\\db_VWMS.mdb";
OleDbConnection oledbCon = new OleDbConnection(strDataSource);
return oledbCon;
}
代碼貼士
OleDbConnection:用來(lái)連接OLEDB數(shù)據(jù)源。
1.4.2 DataOperate類
DataOperate類中,首先實(shí)例化datacon、oledbcon、oledbcom、oledbda和ds 5個(gè)對(duì)象。其中,datacon對(duì)象用來(lái)調(diào)用自定義類DataCon類中的方法,oledbcon對(duì)象用來(lái)連接Access數(shù)據(jù)庫(kù),oledbcom對(duì)象用來(lái)執(zhí)行Command命令語(yǔ)句,oledbda對(duì)象表示用于填充DataSet數(shù)據(jù)集和更新Access數(shù)據(jù)庫(kù)的一組數(shù)據(jù)命令和一個(gè)數(shù)據(jù)庫(kù)連接,ds對(duì)象為數(shù)據(jù)集。實(shí)例化datacon、oledbcon、oledbcom、oledbda和ds這5個(gè)對(duì)象的關(guān)鍵代碼如下:
例程02 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\DataOperate.cs
DataCon datacon = new DataCon(); //實(shí)例化DataCon類對(duì)象
OleDbConnection oledbcon; //實(shí)例化OleDbConnection類對(duì)象,用來(lái)連接Access數(shù)據(jù)庫(kù)
OleDbCommand oledbcom; //實(shí)例化OleDbCommand類對(duì)象,用來(lái)執(zhí)行SQL語(yǔ)句
OleDbDataAdapter oledbda; //實(shí)例化OleDbDataAdapter類對(duì)象,用來(lái)執(zhí)行SQL語(yǔ)句,并記錄結(jié)果集
DataSet ds; //DataSet數(shù)據(jù)集
DataOperate類中自定義了getCom()和getDs()兩個(gè)方法,下面分別對(duì)它們進(jìn)行介紹。
1.getCom()方法
getCom()方法為無(wú)返回值類型的自定義方法,主要用來(lái)執(zhí)行SQL語(yǔ)句,關(guān)鍵代碼如下:
例程03 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\DataOperate.cs
public void getCom(string strCon)
{
oledbcon = datacon.getCon();
oledbcom = new OleDbCommand(strCon, oledbcon);
oledbcon.Open();
oledbcom.ExecuteNonQuery();
oledbcon.Close();
}
代碼貼士
Open:該方法用來(lái)打開(kāi)數(shù)據(jù)庫(kù)連接。
ExecuteNonQuery:執(zhí)行Command命令。
Close:該方法用來(lái)關(guān)閉數(shù)據(jù)庫(kù)連接。
2.getDs()方法
getDs()方法用來(lái)執(zhí)行SQL語(yǔ)句,并返回一個(gè)DataSet類型的數(shù)據(jù)集對(duì)象。此方法中,首先調(diào)用DataCon類中的getCon ()方法實(shí)現(xiàn)Access數(shù)據(jù)庫(kù)連接,然后使用OleDbDataAdapter類對(duì)象填充DataSet數(shù)據(jù)集。關(guān)鍵代碼如下:
例程04 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\DataOperate.cs
public DataSet getDs(string strCon,string tbname)
{
oledbcon = datacon.getCon(); //獲得數(shù)據(jù)庫(kù)連接
oledbda = new OleDbDataAdapter(strCon, oledbcon); //實(shí)例化OleDbDataAdapter對(duì)象
ds = new DataSet(); //實(shí)例化DataSet對(duì)象
oledbda.Fill(ds, tbname); //填充DataSet數(shù)據(jù)集
return ds;
}
1.4.3 SoftReg類
SoftReg類中自定義了GetDiskVolumeSerialNumber()、getCpu()、getMNum()和getRNum() 4個(gè)方法,下面分別對(duì)它們進(jìn)行介紹。
1.GetDiskVolumeSerialNumber()方法
GetDiskVolumeSerialNumber()方法用來(lái)使用ManagementObject對(duì)象的GetPropertyValue()方法獲得本機(jī)的硬盤標(biāo)識(shí)號(hào),其實(shí)現(xiàn)代碼如下:
例程05 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//取得設(shè)備硬盤的卷標(biāo)號(hào)
public string GetDiskVolumeSerialNumber()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
disk.Get();
return disk.GetPropertyValue("VolumeSerialNumber").ToString();
}
代碼貼士
ManagementClass:公共信息模型(CIM)管理類,它是一個(gè)WMI類,通過(guò)該類的成員,可以使用特定的WMI類路徑訪問(wèn)WMI數(shù)據(jù)。
ManagementObject:表示W(wǎng)MI實(shí)例。
GetPropertyValue():該方法用來(lái)獲取某屬性值的等效訪問(wèn)器。
2.getCpu()方法
getCpu()方法用來(lái)獲得本機(jī)的CPU序列號(hào),其實(shí)現(xiàn)代碼如下:
例程06 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//獲得CPU的序列號(hào)
public string getCpu()
{
string strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor"); //指定win32_Processor管理類
ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
foreach (ManagementObject myObject in myCpuConnection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString(); //獲得CPU序列號(hào)
break;
}
return strCpu;
}