1. Windows 怎麼遠程訪問控制MAC系統
1整體簡介:Mac電腦之間可以用過「屏幕共享」實現遠程式控制制,如果要需要控制Windows電腦,並且與這台電腦未處於同一區域網中,那麼只能使用相關工具了,RemoteDesktopConnection,簡稱RDC,由微軟開發,支持通過Mac同時連接多台Windows電腦。要實現遠程式控制制,需要在Windows電腦中作幾項配置:設置密碼、打開防火牆及允許遠程式控制制。2所需工具/原料:Mac系統電腦、Windows系統電腦3方法/步驟:a設置密碼大部分Windows用戶並沒有設置用戶密碼。系統默認管理員用戶名是Administrator,要設置密碼可打開控制面板-用戶帳戶,然後點擊用戶名,選擇創建密碼。填寫密碼後,點擊「創建密碼」。b打開防火牆Win7對安全的設置較高,只有當防火牆啟用後才能進行遠程式控制制。需要注意的是,防火牆並不能完全防止惡意的遠程式控制制,所以一方面應該為電腦設置較為復雜的密碼且定期更換,另一方面使用專業安全軟體防止木馬的侵襲。進入控制面板-系統和安全,點擊Windows防火牆。點擊「打開或關閉Windows防火牆」。在家庭與公用網路位置中均選中「啟用Windows防火牆」。c啟用遠程式控制制選擇系統屬性-遠程,選擇「允許任意版本……」d獲取Windows電腦IP地址點擊屏幕左下角「開始」按鈕,在搜索框中輸入cmd,然後回車。輸入ipconfig,然後回車。此時如下圖所示的IPv4地址,就是Windows電腦的IP地址,記住這段字元。e在Mac端開始連接啟動RDC,輸入Windows的IP地址,點擊「連接」。輸入用戶名及密碼,點擊確定。f完成操作4注意事項:Windows電腦必須與Mac處於同一區域網中,或者Windows電腦擁有固定IP地址。
2. RDC電腦遠程式控制制怎麼弄
就是遠程桌面唄,區域網被訪問的機子開放遠程桌面及埠即可,直接通過ip可以訪問。伺服器也是如此。只是那種沒有公網ip的,就不行了。
3. 在發布本機的ASP頁面後,可以通過哪些方式進行訪問
摘要 1、 IDC Internet Database ConnectorΨ絞姜
4. 什麼是RDC,什麼是POP大神們幫幫忙
一、RDC的概念 RDC即區域分發中心(Regional Distribution Center,簡稱RDC),它是近年來一種極為重要的物流運作模式。 區域分發中心是指物流公司具體進行業務運作的分發、配送中心,一般設有運輸部、資訊部、倉務部和綜合部。 二、RDC物流運作的特點 RDC物流運作模式具有如下特點: 1.高度集權 這種物流運作模式的權利集中在總部,業務開發、各種物流運作指令均來自於物流公司的總部。各地的RDC只是按總部的指令,從事具體的物流服務操作。 2.RDC物流運作模式的支撐系統 RDC物流運作有三大支撐系統,即倉儲系統、運輸系統和物流信息系統。 (1)倉儲系統。建立先進的倉儲管理系統,為生產企業服務,按照貨物的堆放體積收費,參照國際管理,採用先進先出的管理方式進行管理。由於採用社會化、專業化的倉庫管理辦法,其費用要比各企業自己單獨建倉庫,無論從資金方面還是從利用率上均要節省,而且可是的自己的庫存真正降為零,大大降低其倉儲成本。此外在產品銷售方面,各生產企業不僅可以利用RDC的分撥網路,把出廠的產品在最短的時間內送到消費者手中,加快產品的流通,是的產業資本的周轉率明顯提高,而且節省了大量的運輸及廣告費用。由於載運方面採用多家客戶同車配送,同方向貨物一起載運的合理運輸方式,運輸費用大幅度降低,車輛的實載率大幅度提高,整個社會經濟效益增加。 所以,建立RDC的一個非常重要的目標就是實現倉儲專業化、社會化管理,使得企業實現「零庫存」。 (2)運輸系統。作為RDC動脈系統的運輸,對其要求要比傳統運輸高得多,物流中心要對貨物裝運後,到貨物給收貨人運輸的全過程進行全程追蹤。對於運輸的時間、貨損、貨差、貨物的品種都使用一套考核指標即KPI(Key performance Information)。 (3)物流信息系統(IT系統)。IT系統是物流中心聯系各RDC的中樞,主要有以下技術:一是E-mail即電子郵件,這是目前最普遍的、非常便捷、成本較低的信息傳遞系統。目前各物流公司均採用此系統。二是EDI即電子數據交換,這是不同電腦之間按照統一的信息標准所進行的結構化數據交換。它可以簡化貿易清算環節的手續,減少信息傳遞方面的差錯,降低客戶反復修改或磋商時的通信成本和製作成本,縮短公司的采購周期 關於POP 是英文Point Of Purchase的縮寫,意為「賣點廣告」其主要商業用途是刺激引導消費和活躍賣場氣氛。她的形式有戶外招牌,展板,櫥窗海報,店內台牌,價目表,弔旗,甚至是立體卡通模型等等。常用的POP為短期的促銷使用,其表現形式誇張幽默,色彩強烈,能有效地吸引顧客的視點喚起購買欲,她作為一種低價高效的廣告方式已被廣泛應用。>>>POP的製作形式:POP的製作形式有彩色列印,印刷,手繪等方式。隨著電腦軟體技術的發展,在美工設計應用上更盡顯其美觀高效的優勢,甚至可將手繪藝術字形的塗鴉效果模仿的淋漓盡致,並可以接撥來自數碼相機,掃描儀的LOGO圖片等素材。特別適合對POP需求量較大的賣點快速高效低成本的製作。>>>POP的應用:POP主要應用於超市賣場及各類零售終端專賣店等,目前各大型超市賣場多採用印刷成統一模板後由美工根據要求填寫文字內容,以滿足玲琅滿目的貨品櫃面不同的使用要求,機動性和時效性都很強.所以一般單純的手繪POP是難以勝任的,必需以模塊化方式批量製作.中小型零售店,產品專賣店目前有向品牌經營連鎖經營的趨勢發展,在產品組織結構促銷計劃,店面風格等不少和品牌經營者廠家同步運作,但在POP的使用上不少還是各自主張採用不同的文案,推出不同的折扣信息,有的店面甚至還有用黃紙毛筆書寫"特大喜訊"之類的招貼....這顯然不適應品牌運作的趨勢,也許在這一點上品牌供應商應該考慮的更多。 [編輯本段]一、POP的定義 在國際貿易中POP的意思是:產品證明 Proof of Proct 也就是貨物證明 POP(Point Of Purchase)本來是指商業銷售中的一種店頭促銷工具,其型式不拘,但以擺設在店頭的展示物為主,如吊牌、海報、小貼紙、大招牌、實物模型、旗幟等等,都是林立在POP的范圍內。POP的中文名字又名「店頭陳設」。 Post Office Protocol 的縮寫 Post Office Protocol :郵局協議(郵局協議第3版) POP 協議允許工作站動態訪問伺服器上的郵件,目前已發展到第三版,稱為 POP3。POP3 允許工作站檢索郵件伺服器上的郵件。POP3 傳輸的是數據消息,這些消息可以是指令,也可以是應答。 創建一個分布式電子郵件系統有多種不同的技術支持和途徑:POP(郵局協議)、DMSP(分層式電子郵件系統協議)和 IMAP(網際網路信息訪問協議)。其中,POP 協議創建最早因此也最為人們了解;DMSP 具有較好的支持「無連接」操作的性能,但其很大程度上僅限於單個應用程序(PCMAIL);IMAP 提供了 POP 和 DMSP 的擴展集並提供對遠程郵件訪問的三種支持方式:離線、在線和無連接。 POP 協議支持「離線」郵件處理。其具體過程是:郵件發送到伺服器上,電子郵件客戶端調用郵件客戶機程序以連接伺服器,並下載所有未閱讀的電子郵件。這種離線訪問模式是一種存儲轉發服務,將郵件從郵件伺服器端送到個人終端機器上,一般是 PC 機或 MAC。一旦郵件發送到 PC 機或 MAC 上,郵件伺服器上的郵件將會被刪除。 POP3 並不支持對伺服器上郵件進行擴展操作,此過程由更高級的 IMAP4 完成。 POP3 使用 TCP 作為傳輸協議
5. 求救!!關於sql server遠程ado連接的問題
VB訪問SQL Server資料庫技術全揭密
摘 要:
本文討論了Visual Basic應用程序訪問SQL Server資料庫的幾種常用的方法,分別說明了每種方法的內部機理並給出了每種方法的一個簡單的實例,最後比較了每種方法性能和優缺點。
一、引言
SQL Server是微軟推出的中小型網路資料庫系統,是目前最常用的資料庫系統之一。隨著SQL Server網路資料庫應用程序日益增多,這種Web資料庫應用系統的正常運行一般依賴於已存在的用戶資料庫。創建維護資料庫的工作可用SQL Server提供的SQL Enterprise Manager工具來進行,如能提供一種定製的資料庫管理工具,通過管理應用程序來管理資料庫及其設備,對用戶來說無疑是最理想的。
Visual Basic作為一種面向對象的可視化編程工具,具有簡單易學,靈活方便和易於擴充的特點。而且Microsoft為其提供了與SQL Server通信的API函數集及工具集,因此它越來越多地用作大型公司數據和客戶機—伺服器應用程序的前端,與後端的Microsoft SQL Server相結合,VB能夠提供一個高性能的客戶機—伺服器方案。
二、VB訪問SQL Server數據的常用方法
使用Visual Basic作為前端開發語言,與SQL Server介面有幾種常用的方法,即:
①數據訪問對象/Jet
②為ODBC API編程
③使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程
④RDO 遠程數據對象(RemoteData Objects)
⑤ADO 數據對象(Active Data Objects)
1、數據訪問對象/Jet
VB支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能最好的管理客戶機—伺服器之間的對話方式,但它的確有許多優點。DAO/Jet是為了實現從VB訪問Access資料庫而開發的程序介面對象。使用DAOs訪問SQL Server的過程如下:應用程序准備好語句並送至Jet,Jet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器並與之通訊,驅動程序管理器(ODBC.DLL)通過調用驅動器(SQLSRVR.DLL)的函數,實現連接到數據源,翻譯並向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例。
注釋:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset オ
Private Sub Form_Load()
Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
End Sub ァ
上述例子是以非獨占、非只讀方式打開sales資料庫,並檢索Customers表中的所有欄位。OpenDatabase函數的最後一個參數是ODBC連接字元串參數,它指明了Microsoft Access連接到SQL Server所需要知道的一些內容。其中「DSN」為數據源名,「WSID」為工作站名,「DATABASE」為所要訪問的資料庫名。
2、利用ODBC API編程
ODBC(Open Database Connectivity)的思想是訪問異種資料庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態連接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來通過驅動器(SQLSRVR.DLL)把它們送到伺服器中。
下面的代碼使用上面一些函數先登錄到一個伺服器資料庫,並為隨後的工作設置了語句句柄。
Global giHEnv As Long
Global giHDB As Long
Global giHStmt As Long
Dim myResult As integer
Dim myConnection As Srting
Dim myBuff As String*256
Dim myBufflen As Integer
If SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn注釋:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn注釋:t connect!"
End If
myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
3、使用VBSQL對DB庫API編程
DB庫是SQL Server的本地API,SQL Server的Visual Basic庫(VBSQL)為Visual Basic程序員提供API。從一定意義上說,VBSQL是連接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含以下三個文件:
VBSQL.VBX: 包含庫函數,具有訪問重要的消息和處理錯誤的能力
VBSQL.BI:包括所有的常量和變數說明
VBSQL.HLP:Windows幫助文件,使用VBSQL的指南
使用VBSQL時,必須將VBSQL.BI加入到Visual Basic工程文件中,並確保VB程序運行時有VBSQL.VBX文件。
一般的DB庫API編程的過程是這樣的:先通過調用SqlInit對DB庫進行初始化,再調用SqlConnection打開一個連接,然後就可做一些工作。下面的代碼是一個初始化DB庫並登錄到伺服器的通用常式。
Private Sub InitializeApplication()
DBLIB_VERSION=SqlInit()
If DBLIB_VERSION=""Then
MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATION
End If
End Sub
Private Function LoginToServer() As integer
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
If giSqlConn<>0 Then
SqlClose(giSqlConn) 注釋:關閉已打開的連接
giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName)
If giSqlConn<>0 Then
liresuit=SqlUse(giSqlConn,"Sales")
Else
LogintoServer=FAIL
End If
End Function
4、RDO 遠程數據對象(RemoteData Objects)
要討論RDO,就必然要談到DAO。RDO是從DAO派生出來的,但兩者很大的不同在於其資料庫模式。DAO是針對[記錄(Records)]和[欄位( Fields)],而RDO是作為[行(Rows)]和[列(Columns)]來處理。也就是說DAO 是ISAM模式,RDO是關系模式。此外DAO是訪問Access的Jet引擎(Jet是ISAM)的介面,而RDO則是訪問ODBC的介面。
可見,RDO是綜合了DAO/Jet、VBSQL/DBLib以及ODBC的優點的對象(Object)。需要強調的是,RDO是包裹著ODBC API的一層薄薄的外殼, 被設計成在後台(伺服器端)有資料庫存在的前提下運行,同時也是針對SQL Server和Oracle而特別設計的。
RDO的優勢在於它完全被集成在VB之中。此外,直接訪問SQL Server存儲過程、完全支持T-SQL、T-SQL調試集成在開發環境中、Visual Database Tools的集成化等,也是RDO的長處。
在RDO的對象和集合中,有很多對資料庫的狀態和設定進行操作的屬性(Property),以及對資料庫進行操作的方法(Method)。利用這些,從RDO2.0起就可以開發事件驅動的資料庫應用程序。
RDO對象與VB中其他對象的概念相同。與VB用的ActiveX控制項(以往稱為Custom Control或OCX、VBX)相似的是,RDO也帶有屬性和方法;但同Spread、InputMan等普遍應用的ActiveX控制項不同的是,RDO沒有自己的用戶界面,因而可以和VB標準的Timer控制項歸為同一類。當然也可以將RDO看作調用ODBC API函數,進而對後台資料庫操作加以控制的對象。在RDO的屬性和方法中,包含了對單個的ODBC API函數以及一連串API函數的調用。
①rdoEngine對象
最初調用RDO對象以及RDC(遠程數據控制項)時,自動生成rdoEngine對象的附帶事件(incident)。rdoEngine用於對RDO全局屬性的參數、選項進行設置,是在RDO的階層結構內處於最上層的對象,包含了所有的其他對象。
rdoEngine對象與DAO/Jet不同,雖然被多個應用程序共享,但體現rdoEngine對象的設定值的屬性卻並不共用,而是在各自的應用程序的程序界面中對其分別加以設定。這些設定值對其他使用RDO以及RDC的應用程序沒有任何影響。rdoEngine不是集合的要素,而是重新定義的對象,rdoEngine對象不能被追加作成對象屬性的初值。
②rdoEnvironment對象
RDO對象在自動創建rdoEngine對象時,將rdoEnviroment對象的初始值生成並保存為rdoEnviroments(0)。一般情況下,應用程序中不必追加rdoEnvironment對象,大多隻需對已有的rdoEnviroments(0)進行操作就可以了。只有在支持一個以上事務(Transaction),需要將用戶名和口令信息分別處理的情況下,利用rdoCreateEnvironment方法將特定的用戶名和口令值做成新的rdoEnvironment對象。在這個方法中可以指定固有名、用戶名和口令,如果所指定的值與rdoEnvironments集合的已經存在的成員名稱相同,會產生錯誤。新建的rdoEnvironment對象自動追加在rdoEnvironments集合的最後。調rdoCreateEnvironment方法時,其name參數可以是長度為0的文字列,這時新的rdoEnvironment對象將不會被追加在rdoEnvironments集合之中。
③rdoConnection對象
rdoConnection對象用於同SQL Server的連接管理。
下面是與SQL Server連接的例子。
用OpenConnection方法的一個實例。
設定的DSN為MyDSN:
Dim Cn As rdoConnection
Dim En As rdoEnvironment
Dim Conn As String
Conn = "DSN = MyDSN; UID = Jacob;" & "PWD = 123456; DATA BASE = MyDb;"
Set Cn= En.OpenConnection("", rdDriverPrompt, False, Co nn)
Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)
用EstablishConnection方法的一個實例。
這里以獨立的rdoConnection對象為例說明與SQL Server的連接。
Public WithEvents Eng As rdoEngine
Public WithEvents Cn As rdoConnection
Private Sub Form_Load()
Set Eng = New rdoEngine
Set Cn = New rdoConnection
With Cn
.Connect = "UID = ; PWD = ;" & "DATABASE = pubs; DSN = biblio"
.LoginTimeout = 5
.EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble
End With
End Sub
在這個例子中,Form_Load函數對rdoEngine和rdoConnection對象進行初始化。這里有一點需要注意,rdoConnection對象是處於獨立的狀態之下,即使是處於未連接狀態也可以設置屬性的值。接下來是rdoConnect對象的事件處理程序。從RDO 2.0起可以實現非同步方式(rdAsyn cEnable),EstablishConnection就設定為該值。在非同步狀態下,不必等待與資料庫的連接,程序可以迅速從Form_Load 函數中退出。 然後是BeforeConnect事件,該處理在與資料庫的連接開始以前被激發,此時不能進行有關終止連接的操作:
Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant)
MsgBox "正在連接" & ConnectString, vbOKOnly, "連接前"
End Sub
連接完成之後的事件處理:
Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean)
Dim M As String
If ErrorOccurred Then
For Each er In rdoErrors
M = M & er & vbCrLf & M
Next
MsgBox "連接失敗" & vbCrLf & M
Else
MsgBox "連接成功"
注釋:這是確認連接狀態的測試代碼
Cn.Excute "use pubs"
End Sub
RDO連接處理結束後,在該事件中確認連接成功與否。連接成功的情況下ErrorOccurred返回False,失敗時為True,由此可以對rdoErrors集合進行檢測:
Private Sub Eng_InfoMessage()
For Each er In rdoErrors
Debug.Print er
Next
RdoErrors.Clear
End Sub
不能與SQL Server連接的原因多種多樣,有可能是由於對資料庫的訪問許可權、網路連接問題、資料庫表的信息錯誤、SQL Server同時連接的許可數、資源不足等等,具體情況需要與網路管理員商量。 斷開連接的操作非常簡單,但又很重要,因為RDO不提供自動斷開的功能。
Cn.Close
Set Cn = Nothing 注釋:釋放對象所佔的內存資源
En.Close
Set En = Nothing 注釋:釋放對象所佔的內存資源
VB是對象語言,Form、ActiveX控制項也都是對象。使用對象後必須養成將對象設為Nothing把它從內存中釋放的編程習慣。這樣可以預防很多不可預測錯誤,往往程序中發生原因不明的錯誤時,其原因就在於此。
5、ADO 數據對象(Active Data Objects)
ADO是基於全新的OLE DB技術,OLE DB可對電子郵件、文本文件、復合文件、數據表等各種各樣的數據通過統一的介面進行存取。隨著ActiveX控制項的升級(Windows 98的ActiveX 5.0),RDO將被以ActiveX技術為基礎的ADO介面所替代。下面將介紹基於ActiveX技術的ADO訪問SQL Server 6.5資料庫的技術和方法。基於瀏覽器的ADO介面常用函數如下:
(1)取當前的工作資料庫
由於管理任務一般都必須在Master庫中完成,因此在執行管理任務之前,最好保存當前工作庫,以便完成任務之後再切換回原來的任務。
Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
On Error GoTo errSQLGetCurrentDatabaseName
sSQL="select CurrentDB=DB_NAME ( )"
RS.Open sSQL, Cn
SQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB)
RS.Close
Exit Function
errSQLGetCurrentDatabaseName:
SQLGetCurrentDatabaseName=" "
End Function
(2)取SQL Server安裝目錄下的DATA子目錄路徑
取SQL Server的設備文件預設目錄,返回如D:MSSQL DATA。
Public Function SQLGetDataPath(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim sFullPath As String
On Error GoTo errSQLGetDataPath
sSQL="select phyname from master..sysdevices where name=注釋:master注釋: "
RS.Open sSQL, Cn
sFullPath = RS! phyname
RS.Close
SQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注釋:MASTER.DAT的大小
Exit Function
errSQLGetDataPath:
SQLGetDataPath=" "
End Function
(3)創建一個新資料庫
Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize) As Boolean
Dim sSQL As String
On Error GoTo errSQLCreateDatabase65
Dim sDB As String
sDB =SQLGetCurrentDatabaseName(Cn)
sSQL = "USE master"
Cn.Execute sSQL
sSQL ="CREATE DATABASE" & sDBName
sSQL = sSQL &" ON " & sDataDeviceName & "=" & nDataSize
If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then
sSQL = sSQL & "LOG ON" & sLogDeviceName & "="& nLogSize
End If
Cn.Execute sSQL
sSQL = "USE" & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = True
Exit Function
errSQLCreateDatabase65:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = False
End Function
(4)判斷一個資料庫是否存在
Public Function SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim bTmp As Boolean
on Error GoTo errSQLExistDatabase
sSQL = "select CntDB = count ( * ) "
sSQL = sSQL & "From master.dbo.sysdatabases"
sSQL = sSQL & "Where name = 注釋: "& sDBName & " 注釋: "
RS.Open sSQL, Cn
If RS! CntDB = 0 Then bTmp = False Else bTmp = True
RS.Close
SQLExistDatabase = bTmp
Exit Function
errSQLExistDatabase:
SQLExistDatabase = False
Exit Function
End Function
(5)刪除一個資料庫
Public Function SQLDropDatabase (Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
On Error GoTo errSQLDropDatabase
If Not SQLExistDatabase(Cn, sDBName) Then
SQLDropDatabase = True
Exit Function
End If
Dim sDB As String
sDB = SQLGetCurrentDatabaseName(Cn)
sSQL = "Use master"
Cn.Execute sSQL
sSQL = "DROP DATABASE " & sDBName
Cn.Execute sSQL
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = True
Exit Function
errSQLDropDatabase:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = False
End Function
三、性能比較及應用說明
用VB開發基於SQL Server的資料庫系統,以上幾種訪問SQL Server的方法各有各的特點。DAOs方法是基於對象的,因而便於使用,但是它是從Visual Basic到SQL Server最慢的連接方式。ODBC API和VBSQL方法從本質上講是基於程序的。ODBC API方法通用性好,允許最強的互操作性,編程簡單,但速度慢於VBSQL方法。VBSQL方法通過VBSQL控制項,提供了重要的SQL Server前端應用程序所需的靈活性、強大功能和良好性能。它具有真正的事件驅動及錯誤處理能力,完全支持非同步處理、游標和計算列等。這些都是VBSQL方法超出其它方法的優勢,但其編程稍復雜。RDO是位於ODBC API之上的一個對象模型層,它依賴ODBC API、ODBC驅動程序以及後端資料庫引擎來實現,用RDO所需的程序短小(約250 KB)、快速。RDO具備基本的ODBC處理方法,可直接執行大多數ODBC API函數,RDO包含在VB 4.0/VB 5.0企業版中,由MSRDO32.DLL動態連接庫來實現。RDO是綜合了DAO/Jet、VBSQL/DBLib和ODBC的優點的對象模型,包含ODBC API應用層,設計為在後台(伺服器端)有資料庫存在的前提下運行,是針對SQL Server和Oracle而特別設計的。RDO的優勢在於它完全被集成在VB之中,可直接訪問SQL Server存儲過程、完全支持T-SQL、T-SQL調試集成在開發環境中、Visual Database Tools的集成化等。但微軟已宣布今後不再對VBSQL/DBLib進行升級,而ODBC API函數一般的編程方式也不為人們所喜愛,RDO的應用將逐漸減少。至於實際使用哪一種介面方式,在很大程度上依賴於用戶的應用程序的具體情況而定。
四、VisualBasic訪問資料庫的前景
近來隨著Web應用軟體的迅速發展和現有數據存儲形式的多種多樣,Visual Basic訪問資料庫的解決方案面臨諸如快速提取分布於企業內部和外部有用商業信息等的多種挑戰。為此Microsoft提出一種新的資料庫訪問策略,即「統一數據訪問」(UniversalDataAccess)的策略。「統一數據訪問」提供了高性能的存取包括關系型和非關系型在內的多種數據源,提供獨立於開發工具和開發語言的簡單的編程介面,這些技術使得企業集成多種數據源、選擇更好的開發工具、應用軟體、操作平台、建立容易維護的解決方案成為可能。
「統一數據訪問」的基礎是Microsoft的數據訪問組件。這些組件包括ActiveXDataObjects(ADO)、RemoteDataService(RDS,也稱「高級數據連接器或」ADC)、OLEDB和ODBC。
回答者
6. 如何在Windows 2003 上安裝RDC 6.1 訪問RemoteApp
以安裝Windows Server 2003 Enterprise Edition(SP1)系統為例介紹安裝方法:第1步,將Windows Server 2003安裝光碟放入光碟機啟動電腦,當屏幕中出現Press any key to boot from CD……提示信息時,按任意鍵從光碟啟動。安裝程序開始裝載必要的安裝設置文件。進入安裝程序歡迎頁後,屏幕提示用戶按Enter鍵開始安裝系統,按F3鍵退出安裝。按回車鍵鍵繼續。
第2步,打開「Windows 授權協議」頁面,按F8鍵同意協議並繼續安裝。
第3步,安裝程序開始收集電腦上的安裝信息,並要求用戶選擇安裝Windows Server 2003的硬碟分區。默認選中硬碟中的第一個分區(即C盤),用戶可以按方向鍵選中合適的分區,按回車鍵繼續。
第4步,進入磁碟格式化頁面,安裝程序提示用戶使用哪種文件格式來格式化分區。可供選擇的有NTFS分區格式和FAT分區格式。鑒於NTFS文件系統可以擁有更高效的磁碟利用率和安全性能,因此選中「用NTFS文件系統格式化磁碟分區(快)」選項並按回車鍵。
第5步,安裝程序開始格式化磁碟分區,格式化完畢後自動進入文件復制頁面。安裝程序開始將文件復制到Windows安裝文件夾,復制過程所需時間較長。
第6步,文件復制完畢後,安裝程序將在15秒鍾後自動重新啟動電腦。也可按回車鍵馬上重啟。
第7步,重新啟動電腦,可以看到已經出現了Windows Server 2003的啟動畫面。
第8步,系統啟動至Windows界面的安裝屏幕,安裝程序會進一步復制文件,並開始檢測和安裝硬體設備。在此過程中會出現屏幕抖動和黑屏,這屬於正常現象。此過程所需時間比較漫長。
第9步,完成設備安裝後打開「區域和語言設置」對話框,用戶可以選擇設置輸入法等項目。一般保持默認設置,單擊「下一步」按鈕。
第10步,打開「自定義軟體」對話框,按Ctrl+Shift組合鍵激活中文輸入法。然後輸入用戶姓名和工作單位,並單擊「下一步」按鈕。
第11步,在打開的「您的產品密鑰」對話框中,要求輸入Windows Server 2003的合法產品密鑰,只有正確輸入的安裝密鑰後才能進行下一步操作。一般可以在產品授權書中找到密鑰,輸入密鑰後單擊「下一步」按鈕。
第12步,打開「授權模式」對話框,安裝程序要求用戶指定希望使用的授權模式。對於單擊用戶而言保持默認設置即可,而如果區域網中存在多台Windows Server 2003伺服器,則應該選中「每設備或每用戶」單選框。本例保持「每伺服器」單選框的選中狀態,並單擊「下一步」按鈕。
第13步,在打開的「計算機名稱和系統管理員密碼」對話框中,需要設置計算機名稱和系統管理員密碼。需要注意的是計算機名稱的長度不能超過64個字元,建議在15個字元以內,且該名稱在網路具有惟一性。另外系統允許最多使用14個字元作為密碼,且區分大小寫。設置的密碼應當妥善保存。設置完畢單擊「下一步」按鈕。
第14步,在打開的「日期和時間設置」對話框中,調整電腦系統的日期、時間以及時區。「時區」選項一般保持默認設置即可,單擊「下一步」按鈕。
第15步,安裝程序開始安裝網路組件和網路設備,以使該電腦可以上網。
第16步,打開「網路設置」對話框,一般用戶只需選中「典型設置」單選框,然後在完成安裝後作進一步的調整。當然如果需要也可以選中「自定義設置」單選框。單擊「下一步」按鈕。
第17步,在打開的「工作組或計算機域」對話框中,可以設置該電腦隸屬於哪個工作組或域。這些設置只有在區域網環境才有效,一般用戶只需保持默認設置,單擊「下一步」按鈕。
第18步,在後面的安裝過程中,安裝程序將安裝「開始」菜單等系統組件,並對這些組件進行注冊。安裝設置工作將由安裝程序自動完成,最後刪除臨時文件並重新啟動電腦。
第19步,再次重新啟動電腦,這時已經出現了Windows Server 2003的登錄對話框。點按Ctrl+Alt+Del組合鍵。
第20步,系統默認輸入了系統管理員的賬戶名稱Administrator,用戶需要在「密碼」編輯框中輸入事先設置的系統管理員密碼,單擊「確定」按鈕。
第21步,登錄Windows Server 2003系統桌面,自動打開「管理您的伺服器」窗口。至此已經成功安裝了Windows Server 2003系統。
7. Windows Server 2008 R2:為什麼要使用網路級別身份驗證
使用網路級身份驗證 (NLA),而不較舊的終端服務方法,是更快、 更安全。Kristin Griffin從Windows Server 2003 終端服務移動到 Windows Server 2008 R2 遠程桌面服務已成為一個相當普遍的升級路徑。像人此升級,你經常會聽到他們不知道為什麼這兩個版本之間的用戶連接體驗如此不同。連接到一台 2003年終端伺服器時,用戶在其憑據啟動會話和類型。使用RD 會話主機伺服器時,用戶通常到客戶端的對話框中輸入憑據。默認情況下,客戶端不支持調用網路級身份驗證 (NLA) 技術無法連接。為什麼差異?有為什麼微軟推出網路級身份驗證,原因和理由,為什麼它的確是一件好事。NLA 是什麼?NLA 部隊到目前用戶憑據進行身份驗證的客戶端計算機之前,伺服器將創建一個為該用戶的會話。這一進程,因為它有時稱為"前的身份驗證"。伺服器運行的 Windows Server 2008/Vista 或更高版本,並在客戶端運行 Windows XP SP3 或以後,支持 NLA。NLA 依賴技術稱為憑據安全支持提供程序 (CredSSP) 的協議,如果您使用另一個操作系統的遠程桌面協議 (RDP) 客戶端,因為你要問其開發人員,是否它支持 NLA。所以為什麼提交憑據,然後會話創建這樣的好事嗎?有兩個主要好處不創建會話之前你一定嘗試連接該人有權這樣做:它提供了一層防禦拒絕服務 (DoS) 攻擊,它加快了經紀的過程。啟動會話 —— 甚至只顯示登錄屏幕 —— 需要伺服器創建的許多支持會話,如 Csrss.exe 和 Winlogon.exe 所需的過程。為此,會話創建非常昂貴且相對耗時。如果大量的未經授權的用戶嘗試連接到一個會話在同一時間,他們可能能阻止其他人使用該伺服器,因為它創建會話接受這些虛假的登錄憑據。更關鍵的性能問題。在Windows Server 2003,相對較少的農場。Windows Server 2008 的開頭,農場變得更為常見。記住每個會話主機 RD 場中的伺服器可能是重定向器。如果主機伺服器必須創建整個會話之前將連接請求重定向到該路連接經紀,這會減慢連接的時間。NLA 使用 CredSSP 來向伺服器進行身份驗證創建會話之前的用戶憑據。這一進程可以避免這些問題。使用CredSSP 有其他好處。CredSSP 可以減少用戶必須通過存儲特定連接的憑據登錄次數。第一次的用戶連接到新的伺服器、 虛擬機 (VM) 或甚至另一台 PC,他們需要提供其憑據。不過,他們也要保存他們的選項。如果他們這樣做,他們不需要直到他們更改自己的密碼再次提供這方面的憑據。如何支持 CredSSP NLACredSSP 協議幫助應用程序安全地將從客戶端的用戶憑據委託到目標伺服器。本議定書首先確立了在客戶端與目標伺服器 (如指定的 [RFC2246]) 使用傳輸層安全性 (TLS) 加密的通道。當您連接到 RD 會話主機伺服器 RDC 6.x 版或更高版本的客戶端時,您可能已經注意你不直接連接路會話主機伺服器登錄屏幕,提供您的憑據。相反,一個地方的對話框彈出採取在客戶端上的您的憑據。此對話框是 CredSSP 的前端。即使您沒有選擇將它們保存到此對話框中,鍵入您的憑據,當他們去 CredSSP。然後將憑據傳遞給 RD 會話主機伺服器,通過安全通道。RD 會話主機伺服器只將開始建設一旦接受了這些憑據的用戶會話。客戶端支持 CredSSP 和 RDP 6.x 和稍後將始終使用 NLA,如果可用的話。CredSSP (技術支持 NLA) 是操作系統的一部分,而不是的 RDP 的一部分,因為客戶端操作系統必須支持 NLA 工作為 CredSSP。因此,雖然有 RDC 6.0 客戶端可用的 Windows XP SP2,這不讓使用 NLA 的 Windows XP SP2。運行Windows XP SP3 的客戶端,Windows Vista 和 Windows 7 都支持 CredSSP。此外,RDC 會告訴你是否它支持 NLA 在關於屏幕。若要看到這種情況,單擊左上角的 RDC 的電腦圖標,選擇關於。這將指示是否支持 NLA。Windows XP SP3 支持 CredSSP,但不一定在默認情況下啟用它。若要啟用它,微軟發布了一篇知識庫文章,與修復它我鏈接。本文還介紹如何手動啟用 CredSSP。一旦啟用了 CredSSP,重新啟動計算機。如果您的客戶端計算機不正確設置最多支持的 NLA 你會得到一條消息,所以當您嘗試遠程連接到計算機時,需要在 NLA 說。例如,如果您的 Windows XP SP3 客戶端沒有啟用 CredSSP,會出現此錯誤,當您嘗試遠程連接到所需 NLA RD 會話主機伺服器:"遠程計算機需要網路級身份驗證您的計算機不支持"。如何強制使用 NLA默認情況下,路會話主機伺服器不需要 NLA。您可以配置他們允許僅從支持 NLA,通過組策略或從 RD 會話主機配置每個伺服器基礎上的計算機的連接。用於連接到每台伺服器上的 RD 會話主機伺服器要求 NLA,打開 RD 會話主機配置。(在連接部分中) 下雙擊 Rdp-tcp),然後在常規選項卡上選擇允許連接只從計算機運行遠程桌面網路級身份驗證與旁邊的復選框。這將阻止任何客戶端不支持 NLA (即任何客戶端運行在版本 6 之前的 RDC。x和任何操作系統不支持 CredSSP) 連接到伺服器。要啟用 NLA 通過組策略,啟用以下策略,並將其應用到 OU RD 會話主機伺服器:計算機配置 |政策 |管理模板 |Windows 組件 |遠程桌面服務 |遠程桌面會話主機 |安全 |通過使用網路級別的身份驗證要求進行遠程連接的用戶身份驗證。如果禁用或未配置此策略意味著 NLA 並不需要。VDI 請求對於虛擬桌面基礎設施 (VDI) 部署,還可以限制 Windows Vista 和 Windows 7,接受只支持 NLA 客戶端的連接請求。轉到控制面板 |系統 |遠程設置。從系統屬性對話框中的遠程選項卡,選擇允許連接只從計算機運行遠程桌面的網路級身份驗證 (更安全) 的選項。這應解釋為什麼 RD 會話主機伺服器上的啟用 NLA 和 VDI 虛擬機是一個好主意。您應該了解如何在您的伺服器和 VDI 虛擬機上要求 NLA 以及如何設置 NLA 支持的客戶端計算機。證書,雖然只是簡單地說,提到的是必不可少的任何 RDS 部署。這不只是為了 NLA,而且伺服器身份驗證,使用路網關路 Web 訪問、 甚至路連接經紀人。下次我會深入到 RDS 部署證書要求的更多。Kristin Griffin遠程桌面服務 MVP。她溫和派微軟論壇致力於幫助基於伺服器的計算社區 (遠程桌面服務) 和維護在 blog.kristinlgriffin.com RDS 博客。她是貢獻者馬克米納西的"掌控 Windows Server 2008"(Sybex,2008年) 和"掌握 Windows Server 2008 R2"(Sybex,2010年)。她還與塔 · 安德森合著的"Microsoft Windows Server 2008 終端服務資源工具包"(微軟出版社,2008年) 和"Microsoft Windows Server 2008 R2 遠程桌面服務資源工具包"(微軟出版社,2010年)。NLA 問答Q。我正在 Windows XP SP3。我啟用了 CredSSP,但仍然出現以下錯誤時連接到需要 NLA RD 會話主機伺服器:"已發生驗證錯誤"。答: 有用於解決此問題的修復程序 我的博客。在此特定的情況下,這些因素的存在,也會發生此錯誤:與CredSSP 啟用 Windows XP SP3 運行客戶端。配置要使用一個真正的 SSL 證書來標識自己的伺服器 (它不使用自動生成的證書,即在默認情況下的地方)。客戶端不信任用於簽署伺服器上使用 SSL 證書的 CA 證書。由於NLA 要求安全通道,它接收憑據,和它無法創建此隧道,如果它不信任的證書,NLA 不起作用。要解決此問題,請確保 XP 客戶端計算機有用於簽署 RD 會話主機伺服器的 SSL 證書安裝在其計算機受信任的根證書頒發機構證書的證書存儲區的文件夾。Novex此特定的錯誤會稍有變化從 RDC 6.x RDC 7.0。如果您安裝 RDC 7.0,您可能會看到此錯誤消息:"連接已被終止因為從遠程計算機收到意外的伺服器身份驗證證書。相關的內容如何擴展您的應用程序和數據的 to…到處 !桌面文件:了解 RDP虛擬化:使用路網關
8. SQL資料庫區域網共享
可以用ODBC來解決。
ODBC(Open Database Connectivity,開放資料庫互連)是微軟公司開發的一套開放資料庫系統應用程序介面規范,目前它已成為一種工業標准,它提供了統一的資料庫應用程序編程介面(API)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。
SQL語言提供了兩種不同的使用方式。一種是在終端互動式方式下使用,另一種是將SQL語言嵌入到某種高級語言如PL/1、COBOL、FORTRAN、C中使用,利用高級語言的過程性結構來彌補SQL語言在實現復雜應用方面的不足,這種方式下使用的SQL語言稱為嵌入式SQL(Embedded SQL),而嵌入SQL的高級語言稱為主語言或宿主語言。
對宿主型資料庫語言SQL,DBMS可採用兩種方法處理,一種是預編譯,另一種是修改和擴充主語言使之能處理SQL語句。目前採用較多的是預編譯的方法。即由DBMS的預處理程序對源程序進行掃描,識別出SQL語句,把它們轉換成主語言調用語句,以使主語言編譯程序能識別它,最後由主語言的編譯程序將整個源程序編譯成目標碼。
三、 實驗內容:
一個基於ODBC的應用程序對資料庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的資料庫操作由對應的DBMS的ODBC驅動程序完成。
一個完整的ODBC由下列幾個部件組成:應用程序、ODBC管理器、驅動程序管理器(Driver Manager)、ODBC API、ODBC 驅動程序、數據源。
下面我們在前面實驗建立的資料庫的基礎上,配置相應的ODBC數據源。具體步驟如下:
1、通過程序—>設置—>控制面板—>管理工具—>點擊數據源圖標,出現ODBC數據源管理器對話框,點擊系統DSN選項卡,添加系統數據源。
2、選擇SQL SERVER的驅動
3、建立一個數據源名為ds,伺服器:HP或(202.201.224.123)的數據源。
4、SQL SERVER登錄驗證方式採用輸入登錄ID和密碼的SQL SERVER驗證
登錄ID和密碼均為:你的登錄名和密碼
5、默認資料庫指定為你所在班級的資料庫名
6、如下圖,這里使用默認選項,不做改動
7、出現如下圖所示:點擊測試數據源,驗證是否成功。
8、測試結果會出現在下圖所示的對話框中:
如測試成功,點擊確定,名為ds的數據源就建立好了。
這里將結合配置好的數據源,給出一個用Visual Basic連接SQL SERVER2000的實例:即創建一個客戶或前端資料庫應用程序,並在窗體中添加 ADO Data 控制項,以及其它所需要的任何 Visual Basic 控制項。可以根據您的需要在窗體中放置多個 ADO Data 控制項。
這里先介紹一下有關ADO Data 控制項的內容:
ADO Data 控制項使用 Microsoft ActiveX 數據對象(ADO) 來快速建立數據綁定的控制項和數據提供者之間的連接。數據綁定控制項是任何具有「數據源」屬性的控制項。數據提供者可以是任何符合 OLE DB 規范的數據源。使用Visual Basic 的類模塊也可以很方便地創建子集的數據提供者。盡管可以在應用程序中直接使用 ActiveX 數據對象,但 ADO Data 控制項有作為一個圖形控制項的優勢(具有「向前」和「向後」按鈕),以及一個易於使用的界面,使您可以用最少的代碼創建資料庫應用程序。在 Visual Basic 的「工具箱」中,不少控制項都可以作為數據綁定的控制項,包括復選框、組合框、圖像、標簽、列表框、圖片框以及文本框控制項等。此外,Visual Basic 還包括了若干種數據綁定的 ActiveX 控制項,諸如DataGrid、DataCombo、Chart以及 DataList 控制項等。用戶也可以創建自己的數據綁定的 ActiveX 控制項,或從其他開發商購買控制項。
Visual Basic以前的版本提供了內在的 Data 控制項和 Remote Data 控制項(RDC) 來進行數據訪問。這兩種控制項仍包括在 Visual Basic 中,以提供向後兼容。不過,因為 ADO 的適應性更廣,因此建議用戶使用 ADO Data 控制項來創建新的資料庫應用程序。
ADO DATA可能的用法
l 連接一個本地資料庫或遠程資料庫。
l 打開一個指定的資料庫表,或定義一個基於結構化查詢語言 (SQL) 的查詢、或存儲過程、或該資料庫中的表的視圖的記錄集合。
l 將數據欄位的數值傳遞給數據綁定的控制項,可以在這些控制項中顯示或更改這些數值。
l 添加新的記錄,或根據對顯示在綁定的控制項中的數據的任何更改來更新一個資料庫。
創建一個簡單的前端資料庫應用程序:
1、打開Visual Basic,創建一個標准工程(standard exe)。
2、在窗體上放置一個 ADO Data 控制項 (該圖標的工具提示為 "ADODC"),如果該控制項不在「工具箱」中,請按 CTRL+T 鍵,顯示「部件」對話框。在這個「部件」對話框中,單擊「Microsoft ADO Data Control」,再單擊「應用」。
2. 在「工具箱」中,單擊選定「ADO Data控制項」。就建立了一個名為Adodc1的ADO Data控制項,然後按 F4 鍵顯示「屬性」窗口。
3. 在「屬性」窗口中,單擊「ConnectionString」,在它的有側將顯示 圖標。
4. 在「屬性」窗口中,將「RecordSource」屬性設置為一個 SQL 語句。例如:SELECT * FROM Departemnt .
ADO Data控制項屬性設置:
屬性
屬性值
ConnectionString
DSN=ds
CommandType
8-adCmdUnknown
RecordSource
SELECT * FROM Department
5.在窗體上放置一個「標簽」控制項,顯示說明內容。
6.在窗體上再放置一個「文本框」控制項,用來顯示資料庫信息。
7. 在其「屬性」窗口中,將 Text1 的「DataSource」屬性設為 ADO Data 控制項的名稱 (ADODC1)。這樣就將這個文本框和 ADO Data 控制項綁定在一起。
8. 在其「屬性」窗口中,單擊「DataField」將下拉得到一個可用的欄位列表。單擊所要顯示的欄位的名稱。
控制項名
屬性
屬性值
Text1
DataSource
Adodc1
DataField
要顯示的欄位名
9. 對希望訪問的其它每個欄位重復第 5、6、7、8 步。
10.按 F5 鍵運行該應用程序。用戶可以在 ADO Data 控制項中使用四個箭頭按鈕,從而允許用戶到達數據的開始、記錄的末尾或在數據內從一個記錄移動到另一個記錄。
SQL語言與主語言具有不同數據處理方式。SQL語言是面向集合的,一條SQL語句原則上可以產生或處理多條記錄。而主語言是面向記錄的,一組主變數一次只能存放一條記錄。所以僅使用主變數並不能完全滿足SQL語句向應用程序輸出數據的要求,為此嵌入式SQL引入了游標的概念,用游標來協調這兩種不同的處理方式。游標是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字。用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。
使用游標在需要一行一行處理時,游標十分有用。游標可以打開一個結果集合,並提供在結果集中一行一行處理的功能。下面的例子給出了一個利用游標來查詢指定學號的學生所選修的課程成績。
引自:http://www.nx5127.com/863.html
9. 請高手進來幫忙,關於SQL和網路通信鏈接失敗的問題,追加50分。
VB訪問SQL Server資料庫技術全揭密
摘 要:
本文討論了Visual Basic應用程序訪問SQL Server資料庫的幾種常用的方法,分別說明了每種方法的內部機理並給出了每種方法的一個簡單的實例,最後比較了每種方法性能和優缺點。
一、引言
SQL Server是微軟推出的中小型網路資料庫系統,是目前最常用的資料庫系統之一。隨著SQL Server網路資料庫應用程序日益增多,這種Web資料庫應用系統的正常運行一般依賴於已存在的用戶資料庫。創建維護資料庫的工作可用SQL Server提供的SQL Enterprise Manager工具來進行,如能提供一種定製的資料庫管理工具,通過管理應用程序來管理資料庫及其設備,對用戶來說無疑是最理想的。
Visual Basic作為一種面向對象的可視化編程工具,具有簡單易學,靈活方便和易於擴充的特點。而且Microsoft為其提供了與SQL Server通信的API函數集及工具集,因此它越來越多地用作大型公司數據和客戶機—伺服器應用程序的前端,與後端的Microsoft SQL Server相結合,VB能夠提供一個高性能的客戶機—伺服器方案。
二、VB訪問SQL Server數據的常用方法
使用Visual Basic作為前端開發語言,與SQL Server介面有幾種常用的方法,即:
①數據訪問對象/Jet
②為ODBC API編程
③使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程
④RDO 遠程數據對象(RemoteData Objects)
⑤ADO 數據對象(Active Data Objects)
1、數據訪問對象/Jet
VB支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能最好的管理客戶機—伺服器之間的對話方式,但它的確有許多優點。DAO/Jet是為了實現從VB訪問Access資料庫而開發的程序介面對象。使用DAOs訪問SQL Server的過程如下:應用程序准備好語句並送至Jet,Jet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器並與之通訊,驅動程序管理器(ODBC.DLL)通過調用驅動器(SQLSRVR.DLL)的函數,實現連接到數據源,翻譯並向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例。
注釋:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset オ
Private Sub Form_Load()
Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
End Sub ァ
上述例子是以非獨占、非只讀方式打開sales資料庫,並檢索Customers表中的所有欄位。OpenDatabase函數的最後一個參數是ODBC連接字元串參數,它指明了Microsoft Access連接到SQL Server所需要知道的一些內容。其中「DSN」為數據源名,「WSID」為工作站名,「DATABASE」為所要訪問的資料庫名。
2、利用ODBC API編程
ODBC(Open Database Connectivity)的思想是訪問異種資料庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態連接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來通過驅動器(SQLSRVR.DLL)把它們送到伺服器中。
下面的代碼使用上面一些函數先登錄到一個伺服器資料庫,並為隨後的工作設置了語句句柄。
Global giHEnv As Long
Global giHDB As Long
Global giHStmt As Long
Dim myResult As integer
Dim myConnection As Srting
Dim myBuff As String*256
Dim myBufflen As Integer
If SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn注釋:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn注釋:t connect!"
End If
myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
3、使用VBSQL對DB庫API編程
DB庫是SQL Server的本地API,SQL Server的Visual Basic庫(VBSQL)為Visual Basic程序員提供API。從一定意義上說,VBSQL是連接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含以下三個文件:
VBSQL.VBX: 包含庫函數,具有訪問重要的消息和處理錯誤的能力
VBSQL.BI:包括所有的常量和變數說明
VBSQL.HLP:Windows幫助文件,使用VBSQL的指南
使用VBSQL時,必須將VBSQL.BI加入到Visual Basic工程文件中,並確保VB程序運行時有VBSQL.VBX文件。
一般的DB庫API編程的過程是這樣的:先通過調用SqlInit對DB庫進行初始化,再調用SqlConnection打開一個連接,然後就可做一些工作。下面的代碼是一個初始化DB庫並登錄到伺服器的通用常式。
Private Sub InitializeApplication()
DBLIB_VERSION=SqlInit()
If DBLIB_VERSION=""Then
MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATION
End If
End Sub
Private Function LoginToServer() As integer
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
If giSqlConn<>0 Then
SqlClose(giSqlConn) 注釋:關閉已打開的連接
giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName)
If giSqlConn<>0 Then
liresuit=SqlUse(giSqlConn,"Sales")
Else
LogintoServer=FAIL
End If
End Function
4、RDO 遠程數據對象(RemoteData Objects)
要討論RDO,就必然要談到DAO。RDO是從DAO派生出來的,但兩者很大的不同在於其資料庫模式。DAO是針對[記錄(Records)]和[欄位( Fields)],而RDO是作為[行(Rows)]和[列(Columns)]來處理。也就是說DAO 是ISAM模式,RDO是關系模式。此外DAO是訪問Access的Jet引擎(Jet是ISAM)的介面,而RDO則是訪問ODBC的介面。
可見,RDO是綜合了DAO/Jet、VBSQL/DBLib以及ODBC的優點的對象(Object)。需要強調的是,RDO是包裹著ODBC API的一層薄薄的外殼, 被設計成在後台(伺服器端)有資料庫存在的前提下運行,同時也是針對SQL Server和Oracle而特別設計的。
RDO的優勢在於它完全被集成在VB之中。此外,直接訪問SQL Server存儲過程、完全支持T-SQL、T-SQL調試集成在開發環境中、Visual Database Tools的集成化等,也是RDO的長處。
在RDO的對象和集合中,有很多對資料庫的狀態和設定進行操作的屬性(Property),以及對資料庫進行操作的方法(Method)。利用這些,從RDO2.0起就可以開發事件驅動的資料庫應用程序。
RDO對象與VB中其他對象的概念相同。與VB用的ActiveX控制項(以往稱為Custom Control或OCX、VBX)相似的是,RDO也帶有屬性和方法;但同Spread、InputMan等普遍應用的ActiveX控制項不同的是,RDO沒有自己的用戶界面,因而可以和VB標準的Timer控制項歸為同一類。當然也可以將RDO看作調用ODBC API函數,進而對後台資料庫操作加以控制的對象。在RDO的屬性和方法中,包含了對單個的ODBC API函數以及一連串API函數的調用。
①rdoEngine對象
最初調用RDO對象以及RDC(遠程數據控制項)時,自動生成rdoEngine對象的附帶事件(incident)。rdoEngine用於對RDO全局屬性的參數、選項進行設置,是在RDO的階層結構內處於最上層的對象,包含了所有的其他對象。
rdoEngine對象與DAO/Jet不同,雖然被多個應用程序共享,但體現rdoEngine對象的設定值的屬性卻並不共用,而是在各自的應用程序的程序界面中對其分別加以設定。這些設定值對其他使用RDO以及RDC的應用程序沒有任何影響。rdoEngine不是集合的要素,而是重新定義的對象,rdoEngine對象不能被追加作成對象屬性的初值。
②rdoEnvironment對象
RDO對象在自動創建rdoEngine對象時,將rdoEnviroment對象的初始值生成並保存為rdoEnviroments(0)。一般情況下,應用程序中不必追加rdoEnvironment對象,大多隻需對已有的rdoEnviroments(0)進行操作就可以了。只有在支持一個以上事務(Transaction),需要將用戶名和口令信息分別處理的情況下,利用rdoCreateEnvironment方法將特定的用戶名和口令值做成新的rdoEnvironment對象。在這個方法中可以指定固有名、用戶名和口令,如果所指定的值與rdoEnvironments集合的已經存在的成員名稱相同,會產生錯誤。新建的rdoEnvironment對象自動追加在rdoEnvironments集合的最後。調rdoCreateEnvironment方法時,其name參數可以是長度為0的文字列,這時新的rdoEnvironment對象將不會被追加在rdoEnvironments集合之中。
③rdoConnection對象
rdoConnection對象用於同SQL Server的連接管理。
下面是與SQL Server連接的例子。
用OpenConnection方法的一個實例。
設定的DSN為MyDSN:
Dim Cn As rdoConnection
Dim En As rdoEnvironment
Dim Conn As String
Conn = "DSN = MyDSN; UID = Jacob;" & "PWD = 123456; DATA BASE = MyDb;"
Set Cn= En.OpenConnection("", rdDriverPrompt, False, Co nn)
Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)
用EstablishConnection方法的一個實例。
這里以獨立的rdoConnection對象為例說明與SQL Server的連接。
Public WithEvents Eng As rdoEngine
Public WithEvents Cn As rdoConnection
Private Sub Form_Load()
Set Eng = New rdoEngine
Set Cn = New rdoConnection
With Cn
.Connect = "UID = ; PWD = ;" & "DATABASE = pubs; DSN = biblio"
.LoginTimeout = 5
.EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble
End With
End Sub
在這個例子中,Form_Load函數對rdoEngine和rdoConnection對象進行初始化。這里有一點需要注意,rdoConnection對象是處於獨立的狀態之下,即使是處於未連接狀態也可以設置屬性的值。接下來是rdoConnect對象的事件處理程序。從RDO 2.0起可以實現非同步方式(rdAsyn cEnable),EstablishConnection就設定為該值。在非同步狀態下,不必等待與資料庫的連接,程序可以迅速從Form_Load 函數中退出。 然後是BeforeConnect事件,該處理在與資料庫的連接開始以前被激發,此時不能進行有關終止連接的操作:
Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant)
MsgBox "正在連接" & ConnectString, vbOKOnly, "連接前"
End Sub
連接完成之後的事件處理:
Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean)
Dim M As String
If ErrorOccurred Then
For Each er In rdoErrors
M = M & er & vbCrLf & M
Next
MsgBox "連接失敗" & vbCrLf & M
Else
MsgBox "連接成功"
注釋:這是確認連接狀態的測試代碼
Cn.Excute "use pubs"
End Sub
RDO連接處理結束後,在該事件中確認連接成功與否。連接成功的情況下ErrorOccurred返回False,失敗時為True,由此可以對rdoErrors集合進行檢測:
Private Sub Eng_InfoMessage()
For Each er In rdoErrors
Debug.Print er
Next
RdoErrors.Clear
End Sub
不能與SQL Server連接的原因多種多樣,有可能是由於對資料庫的訪問許可權、網路連接問題、資料庫表的信息錯誤、SQL Server同時連接的許可數、資源不足等等,具體情況需要與網路管理員商量。 斷開連接的操作非常簡單,但又很重要,因為RDO不提供自動斷開的功能。
Cn.Close
Set Cn = Nothing 注釋:釋放對象所佔的內存資源
En.Close
Set En = Nothing 注釋:釋放對象所佔的內存資源
VB是對象語言,Form、ActiveX控制項也都是對象。使用對象後必須養成將對象設為Nothing把它從內存中釋放的編程習慣。這樣可以預防很多不可預測錯誤,往往程序中發生原因不明的錯誤時,其原因就在於此。
5、ADO 數據對象(Active Data Objects)
ADO是基於全新的OLE DB技術,OLE DB可對電子郵件、文本文件、復合文件、數據表等各種各樣的數據通過統一的介面進行存取。隨著ActiveX控制項的升級(Windows 98的ActiveX 5.0),RDO將被以ActiveX技術為基礎的ADO介面所替代。下面將介紹基於ActiveX技術的ADO訪問SQL Server 6.5資料庫的技術和方法。基於瀏覽器的ADO介面常用函數如下:
(1)取當前的工作資料庫
由於管理任務一般都必須在Master庫中完成,因此在執行管理任務之前,最好保存當前工作庫,以便完成任務之後再切換回原來的任務。
Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
On Error GoTo errSQLGetCurrentDatabaseName
sSQL="select CurrentDB=DB_NAME ( )"
RS.Open sSQL, Cn
SQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB)
RS.Close
Exit Function
errSQLGetCurrentDatabaseName:
SQLGetCurrentDatabaseName=" "
End Function
(2)取SQL Server安裝目錄下的DATA子目錄路徑
取SQL Server的設備文件預設目錄,返回如D:MSSQL DATA。
Public Function SQLGetDataPath(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim sFullPath As String
On Error GoTo errSQLGetDataPath
sSQL="select phyname from master..sysdevices where name=注釋:master注釋: "
RS.Open sSQL, Cn
sFullPath = RS! phyname
RS.Close
SQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注釋:MASTER.DAT的大小
Exit Function
errSQLGetDataPath:
SQLGetDataPath=" "
End Function
(3)創建一個新資料庫
Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize) As Boolean
Dim sSQL As String
On Error GoTo errSQLCreateDatabase65
Dim sDB As String
sDB =SQLGetCurrentDatabaseName(Cn)
sSQL = "USE master"
Cn.Execute sSQL
sSQL ="CREATE DATABASE" & sDBName
sSQL = sSQL &" ON " & sDataDeviceName & "=" & nDataSize
If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then
sSQL = sSQL & "LOG ON" & sLogDeviceName & "="& nLogSize
End If
Cn.Execute sSQL
sSQL = "USE" & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = True
Exit Function
errSQLCreateDatabase65:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = False
End Function
(4)判斷一個資料庫是否存在
Public Function SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim bTmp As Boolean
on Error GoTo errSQLExistDatabase
sSQL = "select CntDB = count ( * ) "
sSQL = sSQL & "From master.dbo.sysdatabases"
sSQL = sSQL & "Where name = 注釋: "& sDBName & " 注釋: "
RS.Open sSQL, Cn
If RS! CntDB = 0 Then bTmp = False Else bTmp = True
RS.Close
SQLExistDatabase = bTmp
Exit Function
errSQLExistDatabase:
SQLExistDatabase = False
Exit Function
End Function
(5)刪除一個資料庫
Public Function SQLDropDatabase (Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
On Error GoTo errSQLDropDatabase
If Not SQLExistDatabase(Cn, sDBName) Then
SQLDropDatabase = True
Exit Function
End If
Dim sDB As String
sDB = SQLGetCurrentDatabaseName(Cn)
sSQL = "Use master"
Cn.Execute sSQL
sSQL = "DROP DATABASE " & sDBName
Cn.Execute sSQL
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = True
Exit Function
errSQLDropDatabase:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = False
End Function
三、性能比較及應用說明
用VB開發基於SQL Server的資料庫系統,以上幾種訪問SQL Server的方法各有各的特點。DAOs方法是基於對象的,因而便於使用,但是它是從Visual Basic到SQL Server最慢的連接方式。ODBC API和VBSQL方法從本質上講是基於程序的。ODBC API方法通用性好,允許最強的互操作性,編程簡單,但速度慢於VBSQL方法。VBSQL方法通過VBSQL控制項,提供了重要的SQL Server前端應用程序所需的靈活性、強大功能和良好性能。它具有真正的事件驅動及錯誤處理能力,完全支持非同步處理、游標和計算列等。這些都是VBSQL方法超出其它方法的優勢,但其編程稍復雜。RDO是位於ODBC API之上的一個對象模型層,它依賴ODBC API、ODBC驅動程序以及後端資料庫引擎來實現,用RDO所需的程序短小(約250 KB)、快速。RDO具備基本的ODBC處理方法,可直接執行大多數ODBC API函數,RDO包含在VB 4.0/VB 5.0企業版中,由MSRDO32.DLL動態連接庫來實現。RDO是綜合了DAO/Jet、VBSQL/DBLib和ODBC的優點的對象模型,包含ODBC API應用層,設計為在後台(伺服器端)有資料庫存在的前提下運行,是針對SQL Server和Oracle而特別設計的。RDO的優勢在於它完全被集成在VB之中,可直接訪問SQL Server存儲過程、完全支持T-SQL、T-SQL調試集成在開發環境中、Visual Database Tools的集成化等。但微軟已宣布今後不再對VBSQL/DBLib進行升級,而ODBC API函數一般的編程方式也不為人們所喜愛,RDO的應用將逐漸減少。至於實際使用哪一種介面方式,在很大程度上依賴於用戶的應用程序的具體情況而定。
四、VisualBasic訪問資料庫的前景
近來隨著Web應用軟體的迅速發展和現有數據存儲形式的多種多樣,Visual Basic訪問資料庫的解決方案面臨諸如快速提取分布於企業內部和外部有用商業信息等的多種挑戰。為此Microsoft提出一種新的資料庫訪問策略,即「統一數據訪問」(UniversalDataAccess)的策略。「統一數據訪問」提供了高性能的存取包括關系型和非關系型在內的多種數據源,提供獨立於開發工具和開發語言的簡單的編程介面,這些技術使得企業集成多種數據源、選擇更好的開發工具、應用軟體、操作平台、建立容易維護的解決方案成為可能。
「統一數據訪問」的基礎是Microsoft的數據訪問組件。這些組件包括ActiveXDataObjects(ADO)、RemoteDataService(RDS,也稱「高級數據連接器或」ADC)、OLEDB和ODBC。