VB連接資料庫方式主要有兩種,一是通過ODBC介面,ODBC是windows系統里提供的介面,專門連接資料庫的,可以連接多種資料庫,在應用電腦的設置ODBC,也就DSN數據源(下面說到的),連接到伺服器。
第二種就是ADO方式,
VB使用ADO資料庫可以分為有源資料庫和無源資料庫,即是否使用了DSN數據源,如下例:
1、在連接資料庫前首先要在VB菜單中「工程」-「引用」從中選擇 microsoft activeX Data objects 2.6 library和 microsoft activeX Data objects recordset 2.6兩個組件,這是在連接數據前所必做的工作。
2、接下來定義ADO的連接對象,如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
第一種方法採用的是無源的資料庫連接方法
conn.ConnectionString = "Driver={sql server};server=JSZX3-11;uid=sa;pwd=;database=wzc"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用戶名,密碼 from login where 用戶名='" & Trim(Combo1.Text) & "' And 密碼='" & Trim(Text1.Text) & "'", conn, adOpenStatic, adLockReadOnly, adCmdText
If rs.EOF = True And rs.BOF Then
m = MsgBox("請重新登錄", vbExclamation)
Text1.Text = ""
Text1.SetFocus
Else
Form1.Hide
End If
rs.Close
這是第二種方法連接資料庫的方法,這一種方法是採用有源的方法與資料庫連接的方法,代碼如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "DSN=login;uid=sa;pwd=;"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用戶名 from login", conn, adOpenStatic, adLockReadOnly, adCmdText
Dim i As String
For t = 0 To Val(rs.RecordCount) - 1
i = Trim(rs.Fields("用戶名").Value)
rs.MoveNext
Combo1.AddItem i
Next t
rs.Close
連接資料庫的方法很多很多,只要各位去勇敢的償試一下,就可以感覺資料庫的方法並不是很難,本人以前也很想做這方法的工作,只是學識不深,未能完成胸中大志,如今對這些方法的多少有一些了解,特意為那些初學者以供學習之用。
VB使用ADO資料庫可以分為有源資料庫和無源資料庫,即是否使用了DSN數據源,如下例:
1、在連接資料庫前首先要在VB菜單中「工程」-「引用」從中選擇 microsoft activeX Data objects 2.6 library和 microsoft activeX Data objects recordset 2.6兩個組件,這是在連接數據前所必做的工作。
2、接下來定義ADO的連接對象,如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
第一種方法採用的是無源的資料庫連接方法
conn.ConnectionString = "Driver={sql server};server=JSZX3-11;uid=sa;pwd=;database=wzc"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用戶名,密碼 from login where 用戶名='" & Trim(Combo1.Text) & "' And 密碼='" & Trim(Text1.Text) & "'", conn, adOpenStatic, adLockReadOnly, adCmdText
If rs.EOF = True And rs.BOF Then
m = MsgBox("請重新登錄", vbExclamation)
Text1.Text = ""
Text1.SetFocus
Else
Form1.Hide
End If
rs.Close
這是第二種方法連接資料庫的方法,這一種方法是採用有源的方法與資料庫連接的方法,代碼如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "DSN=login;uid=sa;pwd=;"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用戶名 from login", conn, adOpenStatic, adLockReadOnly, adCmdText
Dim i As String
For t = 0 To Val(rs.RecordCount) - 1
i = Trim(rs.Fields("用戶名").Value)
rs.MoveNext
Combo1.AddItem i
Next t
rs.Close
連接資料庫的方法很多很多,只要各位去勇敢的償試一下,就可以感覺資料庫的方法並不是很難,本人以前也很想做這方法的工作,只是學識不深,未能完成胸中大志,如今對這些方法的多少有一些了解,特意為那些初學者以供學習之用。
❷ vb如何連接sql資料庫,求源碼
Dim conn As New ADODB.Connection '創建一個 Connection 實例,在這里使用New等於將Dim和Set合並為一段代碼執行
Dim rs As ADODB.Recordset '創建一個 Recordset 實例,不使用New 是因為,經常需要重復使用Set,因此沒必要在這里使用
Dim CnStr As String, Sql As String '創建兩個字元串變數分別存放兩個集合的SQL語句代碼段
1、裝載資料庫(不屬於Recordset集合)
=============
Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
'以上5個字元串變數分別表示文件路徑和文件名、資料庫地址、資料庫名、數據操作員用戶名、操作員密碼
FileName = App.Path & "\'資料庫名'"
DbIp = "資料庫地址"
DbName = "資料庫名"
DbUser = "數據操作員用戶名"
DbPw = "操作員密碼"
'以上變數根據資料庫類型的不同而不同,有可能只需要1至兩個變數
'1)連接Access資料庫:
'-------------------
CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=" & FileName & ";Jet OLEDB:Database Password=" & DbPw
'2)連接Oracle資料庫:
'-------------------
CnStr = "PROVIDER=MSDAORA.1;Password=" & DbPw & ";User ID=" & DbUser & ";Data Source=" & FileName & ";Persist Security Info=True"
'其中:
'PASSWORD: 密碼
'User ID: 用戶號
'Data Source: 資料庫名
'Persist Security Info:
'Provider:
'3)連接VF的DBF庫:
'----------------
CnStr = "PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=" & DbUser & ";SourceDB=" & FileName &
";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"
'4)連接SQL的資料庫
'------------------
CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=" & DbUser & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQSOFT;SERVER=" &
DbIP
'也可以使用這段簡易代碼 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";UID=" & DbUser & ";pwd=" & DbPw
Conn.Open cnstr '使用 Connection 集合的 Open 方法 與資料庫建立連接
2、Recordset集合的常用方法
==========================
'1)打開一個表
'------------
Sql = "select * from 表名" 'SQL查詢語句
Set rs = New ADODB.Recordset '新建一個實例
rs.Open Sql, conn '使用 Open 方法打開資料庫中的一個表
'注意,這種打開方式只能使用 rs.MoveNext (即,向後移動行坐標)而不能像其他方向,並且不能修改數據內容
'
'rs.Open Sql, conn,1 '雖然只加了個「1」,但這種方法可以向任何方向移動行坐標。
'
'以下參數代表了這個可選值的含義
'0 = adOpenForwardOnly (默認值)打開僅向前類型游標。
'1 = adOpenKeyset 打開鍵集類型游標。
'2 = adOpenDynamic 打開動態類型游標。
'3 = adOpenStatic 打開靜態類型游標。
'
'雖然使用以上方法可以可以實現行坐標(游標)的任意移動,但是仍然無法寫入數據。因此需要進一步的對Open 方法進行完善
'rs.Open Sql, conn, 1, 3 '後面的3是確定讀寫許可權的
'以下參數代表了這個可選值的含義
'1 = adLockReadOnly (默認值)只讀 — 不能改變數據。
'2 = adLockPessimistic 保守式鎖定(逐個) — 在編輯時立即鎖定數據源的記錄。
'3 = adLockOptimistic 開放式鎖定(逐個) — 只在調用 Update 方法時才鎖定記錄。
'4 = adLockBatchOptimistic 開放式批更新 — 用於批更新模式(與立即更新模式相對)。
'
'2)讀寫數據
'----------
'增加一行記錄並對新記錄的內容進行修改並保存可以如下寫法
rs.AddNew '增加一行記錄
rs("...")="..." '數據讀寫操作
...
rs.UpDate '保存寫入資料,如果使用只讀許可權,則不能使用這個方法
rs.Close '這個方法用來關閉你所代開的表,如果不使用這個方法也可以,但是資料庫仍然認為你在對標進行鎖定,可造成資料庫負擔過重
2、對數據進行篩選和排序
=======================
Sql = "select * from 表名" 'SQL查詢語句
'以上為打開一個表的所有內容
Sql = "select top 50 * from 表名" 'SQL查詢語句
'以上為只打開前50行的記錄
Sql = "select top 50 列名1,列名2,列名5 from 表名" 'SQL查詢語句
'以上為只打開前50行的記錄,並且只打開第1、2、5列數據
Sql = "select * from 表名 where 列名1='" & 欄位 & "'" 'SQL查詢語句
'以上為一個簡單的篩選,表示打開的內容必須符合[列名1='" & 欄位 & "'"]的內容
'需要注意的是,資料庫列的類型必須匹配,比如字元串類型需要以單引號括起
'而數字類型則不能用單引號括起
'另外SQL語句還支持通配符,例如 列名1 like '%" & 欄位 & "%'" 表示包含[欄位]
'在表達式中的匹配
'? _(下劃線) 任何單一字元
'* or % 零個或多個字元
'# 任何單一數字(0 — 9)
'[charlist] 任何在字元表中的單一字元
'[!charlist] 任何不在字元表中的單一字元
'註:根據資料庫的不同?、_和*、%的應用有所差別,比如SQL只使用% 和 _ 分別代表多個字元和單一字元
Sql = "select * from 表名 where 列名1='" & 欄位 & "' ORDER BY 欄位1 ASC" '對查詢結果進行升序排列
Sql = "select * from 表名 where 列名1='" & 欄位 & "' ORDER BY 欄位1 DESC" '對查詢結果進行降序排列
Sql = "select * from 表名 where 列名1='" & 欄位 & "' ORDER BY 欄位1 DESC, ORDER BY 欄位2 DESC" '對查詢結果進行多維降序排列(速度奇慢,不推薦使用)
3、Recordset集合的常用屬性方法
==============================
rs.BOF '是否游標在最上邊
rs.EOF '是否游標在最下邊
rs.RecordCount '記錄集的行數(如果使用像前類型的游標,可能返回不準確)
rs.AddNew '新建一行記錄
rs.Update '保存當前行被修改的記錄
rs.Delete '刪除當前行
rs.Close '關閉記錄集
4、Fields集合的一些屬性的解釋
=============================
'以下為簡寫,正常情況需要rs.Fileds.。。。但是Fields屬於Recordset的一個默認集合,因此可以省略
rs() '括弧內可以是列名也可以是列的序號例如:rs("姓名")、rs(3) 都是是可以的
rs(3).Name '返回列名
rs(3).Type '返回列的類型
rs(3).Value '返回當前行的值
rs.Fields.Count '返回列數
❸ 如何用VB連接SQL資料庫做登錄
VB連接SQL資料庫,可通過ADO數據對象和SQL結構化查詢語言實現。
ADO (ActiveX 數據對象), 這項新的數據訪問技術的特性包括:更簡單的對象模型;與其它 Microsoft 和非 Microsoft
的技術更好的集成;為本地和遠程數據數據提供的通用介面;可遠程訪問的和斷開的記錄集;用戶可訪問的數據綁定介面;以及層次結構的記錄集。結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。
代碼示例:
Private Sub XPButton1_Click()
On Error GoTo finish '防錯代碼,防止意外而導致的退出
sql = "select * from 用戶管理 where 用戶名='" & Text1.Text & "' and 密碼='" & Text2.Text & "'"
cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=登錄資料庫用戶名(默認為sa);Password=登錄資料庫密碼;Initial Catalog=資料庫名;Data Source=伺服器名(默認為:MERRYCHINA)" '這是連接SQL資料庫的語句
cn.Open
rs.CursorLocation = adUseClient
rs.Open sql, cn, adOpenDynamic, adLockOptimistic
'以上使用最通用的方法來查詢資料庫中是否有匹配的記錄
If rs.EOF = True Then '如果沒有記錄則說明用戶或密碼為錯誤的
If pnum < 2 Then 'pnum就是密碼驗證次數,當次數超過3次,系統會自動保護退出
pnum = pnum + 1
MsgBox "用戶名或密碼錯誤!", vbInformation, "錯誤次數:" & pnum
rs.Close
cn.Close
Text1.Text = ""
Text2.Text = ""
Text1.SetFocus
Exit Sub
Else
MsgBox "用戶名或密碼錯誤超過三次,系統會自動退出", vbInformation, "提示"
End
End If
Else
loginname = rs.Fields(0)
Form1.Show
rs.Close
cn.Close
End If
Exit Sub
finish:
MsgBox Err.Description
rs.Close
cn.Close
End Sub
注意cn.ConnectionString此句需依據實際的SQL資料庫建立連接獲得的字元串。
❹ VB怎麼連接 SQL 資料庫
一個簡單的方法:
首先,建立程序公共模塊輸入以下代碼:
Public conn As New ADODB.Connection
'全局變數 rst 指針
Public rst As New ADODB.Recordset
'全局調用函數 打開資料庫
Public Function openconn()
conn.ConnectionString = "連接信息"
'此連接信息最簡單的生成辦法:
'在任意窗口下建立一新ADODC控制項
'選擇控制項屬性,通用頁,使用連接字元串,生成(U)
'利用該向導生成出字元串,然後將該字元串復制到"連接信息"中即可
conn.Open
End Function
'全局調用函數 關閉資料庫
Public Function closeconn()
If conn.State = 1 Then
conn.Close
Set conn = Nothing
End If
End Function
然後在窗體文件中可以使用的函數:
打開資料庫:openconn
注意:此函數為自定義函數,無參數,定義在公共模塊中!
建立數據表連接:Set rst = conn.Execute("select * from 數據表名")
如做登陸頁可以這樣判斷用戶名密碼:
Text1.Text = RTrim(rst.Fields("id")) And Text2.Text = RTrim(rst.Fields("password"))
注:其中Text1.Text為輸入用戶名TextBOX Text2.Text為輸入密碼TextBOX
數據表中 id 為保存用戶名 password 為保存密碼!此方法為非加密方法!
關閉資料庫函數:
closeconn
Set rst = Nothing
注:此兩行,必須在打開資料庫的情況下使用!並且每打開一次資料庫後必須先使用此兩句將資料庫關閉後才可打開另一資料庫表文件!!!!!否則程序報錯終止!
添加新數據函數
rst.AddNew
rst("欄位名1") = Text1.Text
rst("欄位名2") = Text2.Text
rst.Update
刪除數據函數
rst.Delete
注:使用此函數前,必須保證資料庫指針函數rst指向需刪除數據,移動rst指針可以使用函數:rst.MoveNext或rst.MoveLast
更新數據函數
rst.Open "update 數據表名 set 欄位1='" + Text1.Text + "',欄位2='" + Text2.Text + "' where id='" + Text3.Text + "'", conn, 1, 3
注,其中 where id = 為更新特定數據表的查找!
如果熟悉SQL語句,還可編寫出其他方式的查找,這里就不多做介紹了!
❺ VB與SQL資料庫的連接
看看服務裡面,sql browser服務是否啟動,這個是負責遠程資料庫連接的
❻ 如何在VB中注冊sql數據源需要詳細步驟或者成功實例
連接數據源
本教程中,我們將學習使用ODBC APIs的細節.
因為我們的程序並不與ODBC驅動程序直接通信,而是通過ODBC管理器來定義一系列APIs供你的程序調用以完成工作,所以我們需要包含odbc32.inc和odbc32.lib文件,當然還有windows.inc。
連接數據源需要以下幾步:
分配一個環境句柄(environment handle). 在進行每個ODBC任務(session)時僅需這樣做一次.一旦獲得了句柄,我們就可修改環境屬性來適合我們的需要。你可以把這想像為在DB工作中創建一個workspace. 確認將使用的ODBC的版本. 你可在ODBC 2.x版和3.x版間選擇.他們在很多方面存在不同,因此本步驟是必須的以使得ODBC管理器它將用何種語法與用戶程序通訊,及如何解釋用戶程序的命令. 分配一個連接句柄.這個步驟可看作創建一個空連接.我們還沒有指定使用那一個驅動程序,連接那一個資料庫.這些信息將在稍後來寫入. 建立一個連接.可通過調用ODBC函數來建立連接.
當連接完成時,必須通過以下步驟來關閉和銷毀它:
斷開與數據源的連接. 釋放連接句柄. 釋放環境句柄 (如果不再需要在這個環境中作更多連接) 分配一個句柄
在ODBC 3.x版本以前,我們需要調用很多獨立的函數來分配環境、連接和語句句柄(SQLAllocEnv, SQLAllocConnect, SQLAllocStmt).而在ODBC 3.x中, 這些函數被SQLAllocHandle所代替,語法如下:
SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandlePtr );
看上去挺麻煩,簡化一下看看:
SQLAllocHandle proto HandleType:DWORD,
InputHandle:DWORD,
OutputHandlePtr:DWORD
SQLRETURN 被定義為SQLSMALLINT類型.而 SQLSMALLINT被定義為短整型,例如一個字(16 bits). 所以該函數的返回值在ax中,而不是 eax. 這是很重要的.但是Win32下函數的參數是通過32位堆棧來傳送的.即使這個參數只是一個字長(16位),它也應被擴展為32位.這就是為什麼HandleType被說明為雙字(dword)而不是字(word).看一下導入庫 odbc32.lib,SQLAllocHandle的入口是_SQLAllocHandle@12. 就是說這個函數的參數的組合長度為12位元組(3 dwords).然而,這不是說C函數的原型不對. SQLAllocHandle會只用HandleType的底位字並忽略高位字.因此C函數原型是功能上(functionally)正確而我們的匯編函數原型反映了實際.
結束了SQL類型的討論,我們來看一看函數的參數和返回值。.
HandleType 是一個常數,定義了希望分配的句柄類型.可能值如下: SQL_HANDLE_ENV 環境句柄(Environment handle)SQL_HANDLE_DBC連接句柄(Connection handle)SQL_HANDLE_STMT語句句柄(Statement handle)SQL_HANDLE_DESC描述符句柄(Descriptor handle)
描述符是一個數據集合描述了一個SQL語句的參數或一個結果集的列數, 視應用程序或驅動程序而定。
InputHandle 是指向父"文本"的句柄.就是說,如果你想分配一個連接句柄, 需要通過一個環境句柄因為連接將在那個環境的文本中建立.如果你想分配一個環境句柄,這個參數必須為SQL_HANDLE_NULL (注意SQL_HANDLE_NULL在windows.inc版本1.18及其以前版本中被不正確的定義為0L.你需要刪除掉"L"否則程序不會被編譯通過.這是我的錯,因為我負責修訂windows.inc中的 SQL/ODBC部分.) 因為環境沒有父文本.對於語句和描述符句柄,我們需要將連接句柄作為這個參數。 OutputHandlePtr 如果調用成功,將指向一個雙字,其中包含了被分配的句柄.
SQLAllocHandle 可能的返回值如下:
SQL_SUCCESS函數成功完成.SQL_SUCCESS_WITH_INFO函數成功完成,但帶回非致命錯誤或警告. SQL_ERROR函數調用失敗.SQL_INVALID_HANDLE傳送給函數的句柄非法.
無論函數的調用成功還是失敗,我們都可通過調用SQLGetDiagRec或SQLGetDiagField函數來獲得更多的信息.它們與Win32 API中的GetLastError很相似.
例子:
.data?
hEnv dd ?
.code
invoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_HANDLE_NULL, addr hEnv
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
選擇ODBC的版本
分配完環境句柄後,我們需要設置一個環境屬性SQL_ATTR_ODBC_VERSION以適當的值.設置環境屬性可通過調用函數SQLSetEnvAttr.你也許猜到了,還有類似的函數如 SQLSetConnectAttr和SQLSetStmtAttr. SQLSetEnvAttr原型如下:
SQLSetEnvAttr proto EnvironmentHandle:DWORD,
Attribute:DWORD,
ValuePtr:DWORD, StringLength:DWORD
EnvironmentHandle. 與字面意思一樣, 它包含了要設置屬性的環境句柄. Attribute. 這是一個常數,表示用戶需要設置的屬性.對我們而言,是SQL_ATTR_ODBC_VERSION.可以從MSDN中查看全部列表. ValuePtr. 這個參數的意義由希望設置的屬性值決定.如果屬性值是32位的, 這個參數將被認為是想要設置的屬性值.如果屬性值是一個字元串或二進制緩沖區,它就被解釋為指向字元串或緩沖區的指針.如果我們指定了要設置的屬性為SQL_ATTR_ODBC_VERSION, 這個參數我們可以填入SQL_OV_ODBC3和SQL_OV_ODBC2這兩個可能值,分別對應ODBC 3.x和2.x. StringLength. 由ValuePtr指向的值的長度. 如果這個值是字元串或二進制緩沖區,這個參數一定是合法的. 如果想設置的屬性是一個雙字,這個參數被忽略.因為 SQL_ATTR_ODBC_VERSION屬性包含一個雙字的值,我們可以只給它賦為NULL.
這個函數的返回值與SQLAllocHandle相同.
例子:
.data?
hEnv dd ?
.code
invoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_HANDLE_NULL, addr hEnv
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetEnvAttr, hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, NULL
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
分配連接句柄
這一步與分配環境句柄相似,我們可以通過調用SQLAllocHandle函數並賦以不同的參數值來完成.
例子:
.data?
hEnv dd ?
hConn dd ?
.code
invoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_HANDLE_NULL, addr hEnv
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetEnvAttr, hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, NULL
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
建立一個連接
我們現在要通過特定的ODBC驅動程序來連接數據源.通過這三個ODBC函數來達成這個目標.它們為我們提供了好幾層"選擇".
SQLConnectCore這是最簡單的函數。它只需要數據源名(DSN,Data source name)和可選的用戶名和密碼.它不提供任何GUI選項例如向用戶顯示一個對話框來提供更多信息。如果你已經有了需要使用的資料庫的DSN就可以使用這個函數.SQLDriverConnectCore這個函數提供了較SQLConnect更多的選擇.我們可以連接一個沒有在系統信息內定義的數據源。如沒有DSN.另外,我們可以指定這個函數是否需要顯示一個對話框來為用戶提供更多信息.例如,如果用戶遺漏了資料庫的名字,它會指導ODBC驅動程序顯示一個對話框,讓用戶來選擇想連接的資料庫.SQLBrowseConnectLevel 1這個函數允許在運行時(RunTime)枚舉數據源.比SQLDriverConnect更加靈活。因為可以多次順序調用SQLBrowseConnect,而每次提供給使用者更多的專用信息直到最後獲得需要的連接句柄.
我將先檢查SQLConnect函數.要使用 SQLConnect,你應先知道什麼是DSN. DSN是數據源名(Data Source Name)的縮寫,是一個唯一標識某數據源的字元串。一個DSN標識了一個包含了如何連接某一特定的數據源的信息的數據結構.這個信息包括要使用何種ODBC驅動程序及要連接哪個資料庫.我們可以通過控制面板中的32位ODBC數據源來創建、修改及刪除DSN.
SQLConnect的語法如下:
SQLConnect proto ConnectionHandle:DWORD
pDSN:DWORD,
DSNLength:DWORD,
pUserName:DWORD,
NameLength:DWORD,
pPassword:DWORD,
PasswordLength:DWORD
ConnectionHandle. 要使用的連接句柄. pDSN. 指向DSN的指針. DSNLength. DSN的長度 pUserName. 指向用戶名的指針 NameLength. 用戶名的長度 pPassword. 指向該用戶名所使用密碼的指針 PasswordLength. 密碼的長度
在最小情況下, SQLConnect 需要連接句柄,DSN和DSN的長度。如果數據源不需要的話,用戶名和密碼就不是必須的.函數的返回值與SQLAllocHandle的返回值相同.
假設我們的系統中有一個叫做"Sales" 的DSN並且我們想連接這個數據源.我們可以這樣做:
.data
DSN db "Sales",0
.code
......
invoke SQLConnect, hConn, addr DSN, sizeof DSN,0,0,0,0
SQLConnect 的缺點是:在連接一個數據源之前,我們必須創建它的DSN. SQLDriverConnect 提供了更大的靈活性.它的語法如下:
SQLDriverConnect proto ConnectionHandle:DWORD,
hWnd:DWORD,
pInConnectString:DWORD,
InStringLength:DWORD,
pOutConnectString:DWORD,
OutBufferSize:DWORD,
pOutConnectStringLength:DWORD, DriverCompletion:DWORD
ConnectionHandle連接句柄 hWnd 應用程序窗口句柄.如果這個參數被置為NULL,驅動程序將不會為用戶顯示一個對話框來顯示更多信息(如果有的話). pInConnectString 指向連接字元串的指針. 這是一個ASCIIZ字元串,格式由要連接的具體ODBC驅動程序描述.它描述了驅動程序名、數據源及其他附加屬性.連接字元串的具體描述請參見MSDN,這里不再細述. InStringLength 連接字元串的長度. pOutConnectString 指向將要被填入完整連接字元串的緩沖區的指針.這個緩沖區將至少有1,024位元組長.這聽上去使人困惑。事實上,我們提供的連接字元串會不完整,這時,ODBC驅動程序會提示用戶更多信息.接下來ODBC驅動程序會根據所有可能的信息創建一個完整的連接字元串並將其放入緩沖區。即使我們提供的連接字元串已經可以工作了,這個緩沖區也會填入更多的屬性值.這個參數的目的是我們可以保存完整連接字元串來為接下來的連接做准備。 OutBufferSize 由pOutConnectString指向的緩沖區的長度. pOutConnectStringLength 指向一個雙字的指針,用來接收由ODBC驅動程序返回的完整連接字元串的長度。 DriverCompletion 一個標志用來指示ODBC管理器/驅動程序是否將提示用戶更多信息.但是,這個標志取決於是否在調用本函數時傳送了hWnd 參數一個窗口句柄。如果沒有,即使該標志被設置,ODBC管理器/驅動程序也不會提示用戶.可能值如下:
SQL_DRIVER_PROMPTODBC驅動程序提示用戶輸入信息。驅動程序將利用這些信息來創建連接字元串.SQL_DRIVER_COMPLETE
SQL_DRIVER_COMPLETE_REQUIRED 僅當用戶提供的連接字元串不完全時, ODBC驅動程序才會提示用戶.SQL_DRIVER_NOPROMPTODBC驅動程序將不會提示用戶.
例子:
.data
strConnect db "DBQ=c:\data\test.mdb;DRIVER={Microsoft Access Driver (*.mdb)};",0
.data?
buffer db 1024 p(?)
OutStringLength dd ?
.code
.....
invoke SQLDriverConnect, hConn, hWnd, addr strConnect, sizeof strConnect, addr buffer, sizeof buffer, addr OutBufferLength, SQL_DRIVER_COMPLETE
斷開與數據源的連接
在連接順利完成後,我們就可以對數據源進行查詢及其他操作.這些將在下一節討論.現在假設我們已完成了對數據源的操作,就可以通過調用SQLDisconnect來斷開與它的連接. 這個函數非常簡單(就象那悲傷而冷酷的現實:毀滅總比創造容易的多).它只需要一個參數:連接句柄。
invoke SQLDisconnect, hConn
釋放連接與環境句柄
在順利地斷開連接後,我們現在可以調用SQLFreeHandle函數來銷毀連接句柄和環境句柄. 這是由ODBC 3.x提供的新函數.它替代了SQLFreeConnect, SQLFreeEnv及SQLFreeStmt函數. SQLFreeHandle語法如下:
SQLFreeHandle proto HandleType:DWORD, Handle:DWORD
HandleType 標識要銷毀句柄的類別的常數.可能值與 SQLAllocHandle中相同 Handle要銷毀的句柄.
For example:
invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
AJAX技術大全 ASP.NET電子教程,編程學院
❼ vb如何連接sql資料庫
1、打開代碼窗口,添加引用:Imports System.Data.SqlClient。
❽ vb怎麼連接sql
在窗體上添加adodc控制項
滑鼠右鍵-adodc屬性-在通用選項卡里,點生成,選for
SQL
Server驅動程序-下一步-連接選項卡里
1.輸入伺服器名稱,2.使用Windows
NT
集成安全設置。3.選擇一個資料庫
點測試連接,看看是否成功。按確定
點記錄源選項卡,命令類型選8,命令文本(SQL)寫:select
*
from
table1
確定,就連接到SQL資料庫的表table1了。
Private
Sub
Command1_Click()
If
Not
Adodc1.Recordset.EOF
Then
Text1.Text
=
Adodc1.Recordset.Fields("line1")
End
If
End
Sub
❾ vb系統中SQL SERVER資料庫的數據源連接問題
首先不是很推薦ODBC連接,需要額外配置,建議用OLEDB
你可以嘗試著建立一個擴展名為udl的文件,新建一個文本文件擴展名改為udl即可。
在裡面配置了資料庫連接以後,再用寫字板你就可以看到你直接可以用到的連接字元串了,例如
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=master;Data Source=.