SQL通常是通過外鍵。
創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、app軟件開發(fā)公司、小程序開發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
創(chuàng)建一個(gè)狀態(tài)表包含一個(gè)狀態(tài)欄,存儲(chǔ)幾個(gè)固定的狀態(tài)。
然后添加到這個(gè)表的外鍵約束。
ALTER TABLE表名WITH CHECK ADD CONSTRAINT fk_status FOREIGN KEY([狀態(tài)])
[狀態(tài)]([狀態(tài)])
首先使用 System.IO.DriveInfo.GetDrives()獲取System.IO.DriveInfo,存入ds()
然后遍歷ds,獲取各個(gè)信息部分。
Dim ds() As System.IO.DriveInfo = System.IO.DriveInfo.GetDrives()
For i As Integer = 0 To ds.Length - 1
TextBox1.Text = TextBox1.Text + ds(i).DriveType.ToString + " " '驅(qū)動(dòng)器類型
TextBox1.Text = TextBox1.Text + ds(i).Name + " " '盤符(驅(qū)動(dòng)器名)
TextBox1.Text = TextBox1.Text + ds(i).IsReady.ToString + " " '是否就緒
If ds(i).IsReady = True Then
TextBox1.Text = TextBox1.Text + ds(i).VolumeLabel + " " '卷標(biāo)
TextBox1.Text = TextBox1.Text + ds(i).TotalSize.ToString + " " '驅(qū)動(dòng)器容量
TextBox1.Text = TextBox1.Text + ds(i).TotalFreeSpace.ToString '驅(qū)動(dòng)器可用容量
End If
TextBox1.Text = TextBox1.Text + vbNewLine
Next
WNetAddConnection 創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的永久性連接
WNetAddConnection2 創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的連接
WNetAddConnection3 創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的連接
WNetCancelConnection 結(jié)束一個(gè)網(wǎng)絡(luò)連接
WNetCancelConnection2 結(jié)束一個(gè)網(wǎng)絡(luò)連接
WNetCloseEnum 結(jié)束一次枚舉操作
WNetConnectionDialog 啟動(dòng)一個(gè)標(biāo)準(zhǔn)對(duì)話框,以便建立同網(wǎng)絡(luò)資源的連接
WNetDisconnectDialog 啟動(dòng)一個(gè)標(biāo)準(zhǔn)對(duì)話框,以便斷開同網(wǎng)絡(luò)資源的連接
WNetEnumResource 枚舉網(wǎng)絡(luò)資源
WNetGetConnection 獲取本地或已連接的一個(gè)資源的網(wǎng)絡(luò)名稱
WNetGetLastError 獲取網(wǎng)絡(luò)錯(cuò)誤的擴(kuò)展錯(cuò)誤信息
WNetGetUniversalName 獲取網(wǎng)絡(luò)中一個(gè)文件的遠(yuǎn)程名稱以及/或者UNC(統(tǒng)一命名規(guī)范)名稱
WNetGetUser 獲取一個(gè)網(wǎng)絡(luò)資源用以連接的名字
WNetOpenEnum 啟動(dòng)對(duì)網(wǎng)絡(luò)資源進(jìn)行枚舉的過程
1.WNetAddConnection
VB聲明
Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
說明
創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的永久性連接
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpszNetPath String,要連接的網(wǎng)絡(luò)名
lpszPassword String,可選的一個(gè)密碼。如為vbNullString,表示采用當(dāng)前用戶的默認(rèn)密碼。如為一個(gè)空字串,則不用任何密碼
lpszLocalName String,資源的本地名稱。(例如,F(xiàn): 和 LPT1:)
2.WNetAddConnection2
VB聲明
Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
說明
創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的連接
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpNetResource NETRESOURCE,在這個(gè)結(jié)構(gòu)中設(shè)置了下述字段,對(duì)要連接的網(wǎng)絡(luò)資源進(jìn)行了定義:dwType, lpLocalName (可為 vbNullString), lpRemoteName, lpProvider (設(shè)為 vbNullString 表示用默認(rèn)提供者)。該結(jié)構(gòu)的其他所有變量都會(huì)被忽略
lpPassword String,可選的一個(gè)密碼。如為vbNullString,表示采用當(dāng)前用戶的默認(rèn)密碼。如為一個(gè)空字串,則不用任何密碼
lpUserName String,用于連接的用戶名。如為vbNullString,表示使用當(dāng)前用戶
dwFlags Long,設(shè)為零;或指定常數(shù)CONNECT_UPDATE_PROFILE,表示創(chuàng)建永久性連接
3.WNetAddConnection3
VB聲明
Declare Function WNetAddConnection3 Lib "mpr.dll" Alias "WNetAddConnection3A" (ByVal hwnd As Long, lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long)
說明
創(chuàng)建同一個(gè)網(wǎng)絡(luò)資源的連接。這個(gè)函數(shù)與WNetAddConnection2類似,只是它允許我們?yōu)檫@個(gè)函數(shù)顯示的對(duì)話框指定一個(gè)物主窗口
返回值
Long,
參數(shù)表
參數(shù) 類型及說明
hwnd Long,指定一個(gè)窗口句柄,用作本函數(shù)創(chuàng)建的對(duì)話框的父窗口
lpNetResource NETRESOURCE,在這個(gè)結(jié)構(gòu)中設(shè)置了下述字段,對(duì)要連接的網(wǎng)絡(luò)資源進(jìn)行了定義:dwType, lpLocalName (可為 vbNullString), lpRemoteName, lpProvider (設(shè)為 vbNullString 表示用默認(rèn)提供者)。該結(jié)構(gòu)的其他所有變量都會(huì)被忽略
lpPassword String,可選的一個(gè)密碼。如為vbNullString,表示采用當(dāng)前用戶的默認(rèn)密碼。如為一個(gè)空字串,則不用任何密碼
lpUserName String,用于連接的用戶名。如為vbNullString,表示使用當(dāng)前用戶
dwFlags Long,設(shè)為零;或指定常數(shù)CONNECT_UPDATE_PROFILE,表示創(chuàng)建永久性連接
4.WNetCancelConnection
VB聲明
Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long
說明
結(jié)束一個(gè)網(wǎng)絡(luò)連接
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpszName String,已連接資源的遠(yuǎn)程名稱或本地名稱
bForce Long,如為TRUE,表示斷開連接(即使連接的資源上正有打開的文件或作業(yè))
5.WNetCancelConnection2
VB聲明
Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
說明
結(jié)束一個(gè)網(wǎng)絡(luò)連接
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpszName String,已連接資源的遠(yuǎn)程名稱或本地名稱
dwFlags Long,設(shè)為零或CONNECT_UPDATE_PROFILE。如為零,而且建立的是永久性連接,則在windows下次重新啟動(dòng)時(shí)仍會(huì)重新連接
fForce Long,如為TRUE,表示強(qiáng)制斷開連接(即使連接的資源上正有打開的文件或作業(yè))
6.WNetCloseEnum
VB聲明
Declare Function WNetCloseEnum Lib "mpr.dll" Alias "WNetCloseEnum" (ByVal hEnum As Long) As Long
說明
結(jié)束一次枚舉操作
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
hEnum Long,由 WNetOpenEnum函數(shù)返回的一個(gè)枚舉句柄
7.WNetConnectionDialog
VB聲明
Declare Function WNetConnectionDialog Lib "mpr.dll" Alias "WNetConnectionDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long
說明
啟動(dòng)一個(gè)標(biāo)準(zhǔn)對(duì)話框,以便建立同網(wǎng)絡(luò)資源的連接
返回值
Long,零表示成功。如用戶取消了操作,則返回-1。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
hwnd Long,指定要成為對(duì)話框父窗口的一個(gè)窗口的句柄
dwType Long,設(shè)成RESOURCETYPE_DISK,瀏覽磁盤資源
8.WNetDisconnectDialog
VB聲明
Declare Function WNetDisconnectDialog Lib "mpr.dll" Alias "WNetDisconnectDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long
說明
啟動(dòng)一個(gè)標(biāo)準(zhǔn)對(duì)話框,以便斷開同網(wǎng)絡(luò)資源的連接
返回值
Long,零表示成功。如用戶取消了操作,則返回-1。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
hwnd Long,指定要成為對(duì)話框父窗口的一個(gè)窗口的句柄
dwType Long,設(shè)成RESOURCETYPE_DISK 或 RESOURCETYPE_PRINT,決定要斷開的是磁盤還是打印機(jī)資源
9.WNetEnumResource
VB聲明
Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
說明
枚舉網(wǎng)絡(luò)資源
返回值
Long,零表示成功。ERROR_NO_MORE_ITEMS表示不剩下可以枚舉的條目。ERROR_MORE_DATA表示條目不能裝入lpBuffer。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
hEnum Long,從WNetOpenEnum函數(shù)返回的一個(gè)句柄
lpcCount Long,最初設(shè)為要枚舉的最大資源數(shù)量;或設(shè)為-1,表示枚舉盡可能多的資源。一旦返回,就會(huì)設(shè)為實(shí)際枚舉的資源數(shù)量
lpBuffer Any,通常是一個(gè)字節(jié)緩沖區(qū)的首字節(jié)。該緩沖區(qū)裝載了枚舉信息(可按引用聲明為Byte)
lpBufferSize Long,以字節(jié)為單位指定lpBuffer數(shù)組的長度。如緩沖區(qū)不夠大,則設(shè)為需要的緩沖區(qū)長度
注解
枚舉網(wǎng)絡(luò)條目時(shí),最好用vb一次枚舉一個(gè)資源。盡量不要使用這個(gè)函數(shù)同時(shí)枚舉許多網(wǎng)絡(luò)資源的功能
10.WNetGetConnection
VB聲明
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
說明
獲取本地或已連接的一個(gè)資源的網(wǎng)絡(luò)名稱
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpszLocalName String,本地設(shè)備的名字
lpszRemoteName String,指定一個(gè)字串緩沖區(qū),用于裝載設(shè)備的資源名稱
cbRemoteName Long,lpszRemoteName緩沖區(qū)的字符數(shù)量。如緩沖區(qū)不夠大,則設(shè)為需要的緩沖區(qū)長度
11.WNetGetLastError
VB聲明
Declare Function WNetGetLastError Lib "mpr.dll" Alias "WNetGetLastErrorA" (lpError As Long, ByVal lpErrorBuf As String, ByVal nErrorBufSize As Long, ByVal lpNameBuf As String, ByVal nNameBufSize As Long) As Long
說明
獲取網(wǎng)絡(luò)錯(cuò)誤的擴(kuò)展錯(cuò)誤信息
返回值
Long,零表示成功。ERROR_INVALID_ADDRESS表示緩沖區(qū)無效
參數(shù)表
參數(shù) 類型及說明
lpError Long,指定一個(gè)變量,用于裝載網(wǎng)絡(luò)錯(cuò)誤代碼。具體的代碼由網(wǎng)絡(luò)供應(yīng)商決定
lpErrorBuf String,指定一個(gè)字串緩沖區(qū),用于裝載網(wǎng)絡(luò)錯(cuò)誤的說明
nErrorBufSize Long,lpErrorBuf緩沖區(qū)包含的字符數(shù)量
lpNameBuf String,用于裝載網(wǎng)絡(luò)供應(yīng)商名字的字串緩沖區(qū)
nNameBufSize Long,lpNameBuf緩沖區(qū)的字符數(shù)量
12.WNetGetUniversalName
VB聲明
Declare Function WNetGetUniversalName Lib "mpr" Alias "WNetGetUniversalNameA" (ByVal lpLocalPath As String, ByVal dwInfoLevel As Long, lpBuffer As Any, lpBufferSize As Long) As Long
說明
獲取網(wǎng)絡(luò)中一個(gè)文件的遠(yuǎn)程名稱以及/或者UNC(統(tǒng)一命名規(guī)范)名稱。例如,假設(shè)一個(gè)已連接的遠(yuǎn)程驅(qū)動(dòng)器是\\othersystem\CDrive,它對(duì)應(yīng)的本地驅(qū)動(dòng)器是F:,而且在它的子目錄temp中包含了文件xyz.doc。那么運(yùn)算結(jié)果如下:LocalPath xyz.doc 或 f:\temp\xyz.doc(或者文件的任何相對(duì)路徑名)
UNC 名稱: \\othersystem\CDrive\temp\xyz.doc
連接名稱: \\othersystem\CDrive
剩余名稱: \temp\xyz.doc
它們分別對(duì)應(yīng)于由這個(gè)函數(shù)裝載的REMOTE_NAME_INFO結(jié)構(gòu)的字段,對(duì)該結(jié)構(gòu)的定義如下:
Type REMOTE_NAME_INFO
pUniversalName As Long
pConnectionName As Long
pRemainingPath As Long
End Type
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpLocalPath String,磁盤文件的名字
dwInfoLevel Long,下述常數(shù)之一:
UNIVERSAL_NAME_INFO_LEVEL 只設(shè)置pUniversalName字段
REMOTE_NAME_INFO_LEVEL 設(shè)置REMOTE_NAME_INFO結(jié)構(gòu)中的所有三個(gè)字段
lpBuffer Any,指定用于裝載UNC信息的一個(gè)緩沖區(qū)。緩沖區(qū)起點(diǎn)與一個(gè)REMOTE_NAME_INFO結(jié)構(gòu)對(duì)應(yīng)
lpBufferSize Long,以字節(jié)為單位指定lpBuffer緩沖區(qū)的長度。如緩沖區(qū)不夠大,則設(shè)為需要的緩沖區(qū)長度
13.WNetGetUser
VB聲明
Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
說明
獲取一個(gè)網(wǎng)絡(luò)資源用以連接的名字
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
lpName String,指定已連接資源的遠(yuǎn)程名稱或本地名稱。用vbNullString獲取當(dāng)前用戶的名字
lpUserName String,用于裝載用戶名的一個(gè)字串緩沖區(qū)
lpnLength Long,lpUserName緩沖區(qū)的長度。如緩沖區(qū)不夠大,則自動(dòng)設(shè)為需要的緩沖區(qū)長度
14.WNetOpenEnum
VB聲明
Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
說明
啟動(dòng)對(duì)網(wǎng)絡(luò)資源進(jìn)行枚舉的過程。這個(gè)函數(shù)會(huì)返回由WNetEnumResource函數(shù)用于枚舉資源所用的一個(gè)句柄
返回值
Long,零表示成功。會(huì)設(shè)置GetLastError。如GetLastError是ERROR_EXTENDED_ERROR,則可用WNetGetLastError取得額外的錯(cuò)誤信息
參數(shù)表
參數(shù) 類型及說明
dwScope Long,指定要枚舉的資源范圍??稍O(shè)為下述常數(shù)之一:
RESOURCE_CONNECTED 枚舉已連接的資源(忽略dwUsage)
RESOURCE_GLOBALNET 枚舉所有資源
RESOURCE_REMEMBERED 只枚舉永久性連接
dwType Long,下述常數(shù)之一
RESOURCE_ANY 枚舉所有類型的網(wǎng)絡(luò)資源
RESOURCE_DISK 枚舉磁盤資源
RESOURCE_PRINT 枚舉打印資源
dwUsage Long,可設(shè)為零,表示枚舉所有資源;或設(shè)為下述常數(shù)的一個(gè)或兩個(gè):
RESOURCEUSAGE_CONNECTABLE 只枚舉那些能夠連接的資源
RESOURCEUSAGE_CONTAINER 只枚舉包含了其他資源的資源
lpNetResource NETRESOURCE,這個(gè)結(jié)構(gòu)指定了一個(gè)容器資源。該函數(shù)會(huì)枚舉包含于這里指定的某個(gè)指定資源內(nèi)的資源。如設(shè)為NULL(把聲明變成ByVal As Long),那么函數(shù)會(huì)枚舉頂級(jí)網(wǎng)絡(luò)資源。倘若在dwScope參數(shù)里沒有指定RESOURCE_GLOBALNET,那么必須為NULL
lphEnum Long,指定一個(gè)變量,用于裝載一個(gè)枚舉句柄。該句柄由WNetEnumResource函數(shù)使用。必須用WNetCloseEnum函數(shù)將其清除
strResult += 磁盤類型: System.Convert.ToInt16(disk(DriveType).ToString())End IfMsgBox(strResult)NextEnd Sub總結(jié):在VB.NET中,用API函數(shù)可以獲取硬盤信息。原來熟悉API函數(shù)VB6程序員,可以對(duì)API函數(shù)聲明進(jìn)行適當(dāng)?shù)母暮?,進(jìn)行調(diào)用。利用FSO(文件系統(tǒng)對(duì)象)的Scrrun.DLL,也可以獲得磁盤信息。在.net Framwork中,利用WMI可以獲取更多的關(guān)于機(jī)器硬件的詳細(xì)信息(參考System.Management命名空間)。
這個(gè)功能實(shí)現(xiàn)起來其實(shí)也很簡(jiǎn)單,就是通過反射去讀取 DescriptionAttribute 的 Description 屬性的值,代碼如下所示:
/// summary
/// 返回枚舉項(xiàng)的描述信息。
/// /summary
/// param name="value"要獲取描述信息的枚舉項(xiàng)。/param
/// returns枚舉想的描述信息。/returns
public static string GetDescription(Enum value)
{
Type enumType = value.GetType();
// 獲取枚舉常數(shù)名稱。
string name = Enum.GetName(enumType, value);
if (name != null)
{
// 獲取枚舉字段。
FieldInfo fieldInfo = enumType.GetField(name);
if (fieldInfo != null)
{
// 獲取描述的屬性。
DescriptionAttribute attr = Attribute.GetCustomAttribute(fieldInfo,
typeof(DescriptionAttribute), false) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
這段代碼還是很容易看懂的,這里取得枚舉常數(shù)的名稱使用的是 Enum.GetName() 而不是 ToString(),因?yàn)榍罢吒?,而且?duì)于不是枚舉常數(shù)的值會(huì)返回 null,不用進(jìn)行額外的反射。
當(dāng)然,這段代碼僅是一個(gè)簡(jiǎn)單的示例,接下來會(huì)進(jìn)行更詳細(xì)的分析。
Private Function 硬盤序列號(hào)() As String
Try
Dim myInfo As Microsoft.Win32.RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 1\Target Id 0\Logical Unit Id 0")
硬盤序列號(hào) = Trim(myInfo.GetValue("SerialNumber"))
Catch
Try
Dim myInfo As Microsoft.Win32.RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 1\Target Id 0\Logical Unit Id 0")
硬盤序列號(hào) = Trim(myInfo.GetValue("SerialNumber"))
Catch
硬盤序列號(hào) = ""
End Try
End Try
End Function
試下,如果返回為空,則表示失敗。
在本機(jī)win8win8.1有效,不過好像在有些機(jī)器上沒用。