怎樣在vb中寫sql語句
先是定義一個字符串變量,然后把你要寫的SQL語句賦給它。
這時如果要把一些VB控件里的數據加進去也一樣就是一個字符串聯接而以,唯一要注意的是標點符號的使用如:' 這個符號,因為很多時候要用到這個,我碰到好多人都是這里出錯了。例如:Dim strsql As String strsql = "select * from TblSystemData" If dh。
Text " " Then '單號 strsql = strsql & " where ChrCode like " & "'" & dh。Text & "'" End If 當然你也可以把第一個它移到前面去。
但我是單獨放出來,這樣更清楚一點。 接著是執行了。
這個你可以看一下二樓的。例如:rst3。
Open strsqlm con1_offer, adOpenKeyset, adLockOptimistic, adCmdText 這方面詳細的知識你就要找書來看一下更好了,也可以去加一些QQ的群,里面人多,方便啊。
如何用vb語句連接SQL數據庫
可以參考下邊自己稍作修改即可:
Sub Main()
On Error GoTo On_error
'*
Set con = New *tion
*tionString = ("Provider=SQLOLEDB;User ID=sa;PWD=;Initial Catalog=human;Data Source=.")
*
*dTimeout = 20
Load frmLogin
* vbModal
Exit Sub
On_error:
If * = -2147467259 Or * = -2147217900 Then
Unload frmWelcome
MsgBox "檢查到 SQL Server 未安裝或軟件所需數據庫未安裝。" & vbCrLf & "正在進一步檢查 SQL Server 的安裝情況,若已啟動則開始安裝數據庫。 ", vbInformation + vbOKOnly, "系統提示"
Shell (* & "\*")
End
Else
MsgBox * & *ption, vbInformation + vbOKOnly, "系統提示"
End
End If
End Sub
vb中如何使用數據庫vb最好是用sql語言
通過中間件ADO或 去連接 '引用ADO("工程"/"引用"/Microsoft ActiveX Data Objects 2。
X Library) Private Sub Command1_Click() Dim cn As New ADODB。 Connection, rs As New ADODB。
RecordSet '混合驗證方式的連接: 'cn。ConnectionString = "Provider=SQLOLEDB。
1;Persist Security Info=False;User ID=登陸用戶名;Password=登錄密碼;Initial Catalog=數據庫名;Data Source=服務器別名/IP" '集成驗證的連接: cn。 ConnectionString = "Provider=SQLOLEDB。
1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=數據庫名;Data Source=服務器別名/IP" cn。 Open rs。
CursorLocation=adUseClient'設置客戶端游標 rs。Open "select * from 表1", cn, 3, 2 。
。
。 End Sub。
VB SQL語句涵義
where 1=1有什么用?在SQL語言中,寫這么一句話就跟沒寫一樣。
select * from table1 where 1=1與select * from table1完全沒有區別,甚至還有其他許多寫法,12,'a'='a','a''b',其目的就只有一個,where的條件為永真,得到的結果就是未加約束條件的。
在SQL注入時會用到這個,例如select * from table1 where name='lala'給強行加上select * from table1 where name='lala' or 1=1這就又變成了無約束的查詢了。
最近發現的妙用在于,在不定數量查詢條件情況下,1=1可以很方便的規范語句。例如一個查詢可能有name,age,height,weight約束,也可能沒有,那該如何處理呢?
String sql=select * from table1 where 1=1
為什么要寫多余的1=1?馬上就知道了。
if(!*("")){
sql=sql+"name='"+name+"'";
}
if(!*("")){
sql=sql+"age'"+age+"'";
}
if(!*("")){
sql=sql+"height='"+height+"'";
}
if(!*("")){
sql=sql+"weight='"+weight+"'";
}
如果不寫1=1呢,那么在每一個不為空的查詢條件面前,都必須判斷有沒有where字句,否則要在第一個出現的地方加where
where 1=1的寫法是為了檢化程序中對條件的檢測
打個比方有三個參數a, b, c
@sql=select * from tb'
這三個參數都可能為空
這時你要構造語句的話,一個個檢測再寫語句就麻煩
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
這里你怎么寫?要不要加where 或直接用 and ?,你這里還要對@a是否為空進行檢測
用上 where 1=1 之后,就不存在這樣的問題, 條件是 and 就直接and ,是or就直接接 or
----------------------------------count(1) 與 count(*)
這個要看你自己數據庫設計的結構啦
如果你的數據表沒有主鍵,那么count(1)比count(*)快
如果有主鍵的話,那主鍵(聯合主鍵)作為count的條件也比count(*)要快
如果你的表只有一個字段的話那count(*)就是最快的啦
count(*) count(1) 兩者比較。主要還是要count(1)所相對應的數據字段。
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
因為count(*),自動會優化指定到那一個字段。所以沒必要去count(?),用count(*),sql會幫你完成優化的
VB中如何運用SQL查詢語句
通過部件adbc部件,可以直接連庫,一般我通過adbc部件生成sql連接字符串,然后新建conn對象,連接數據庫
set conn=*("*tion")
* "連接字符串"
再新建set rs=*("*Set")
然后通過執行sql語句,把取得的記錄集存到rs對象中,以便調用
* (sql,conn,3,3,-1)
open函數(或者叫方法)第一個參數是要執行的sql語句,第二個參數是操作哪個數據庫,根據connection對象確定數據庫,第三第四第五個參數是表示通過什么類型的游標,應用什么鎖,最后一個忘了,不過默認是-1,不用管,不重要
如果不需要返回記錄集的話,比如update ,insert 可以通過數據庫連接對象的方法直接執行sql語句
*e(sql)
就可以執行了
VB執行SQL語句的問題
VB中“對象關閉時,不允許操作”解決方案 最近兩天在VB里弄一些小程序,好久沒接觸了,感覺有些陌生了,還算有點基礎吧,遇到一些小的難題基本上都能解決。
不過,這下真的遇到難題了,琢磨半天硬是沒弄出結果來,在網上查資料也沒個底,如同大海撈針呀,關鍵是沒一點正經的答案和可行的方案。問題是這樣的,在VB中執行存儲過程,想輸出返回值并將數據綁定到DataGrid控件中,本來是件小菜的問題,在.NET、ASP里都做通過,但在VB里卻是折磨了半天也沒弄出來。
還是自己動手吧,有問題就得想辦法,一步步來吧。先在SQL 2000中寫好存儲過程了,(這里不再寫出存儲過程的具體代碼了,也就是一個返回值,一個記錄集)然后在VB中引用ADO對象,輸入如下代碼,以調用存儲過程: Dim lackconn As New *tion *tionString=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=boyd;Initial Catalog=mydb;Data Source=(local) *Location = adUseClient '設置為客戶端 * Set lackcmd = New *d *Connection = lackconn *dText = myproc '這里為存儲過程名稱 *dType = adCmdStoredProc '指定為存儲過程 Set param = *Parameter(@num, adInteger, adParamReturnValue, 4) '@num為返回值 * param Set lackrs = New *set Set lackrs = *e() msgbox 站點總數: & *ters(@num).Value & 個 Set *urce = lackrs 'mydatagrid為對象名稱 *h '刷新DataGrid '下面關閉數據庫對象等略去 就這樣的一個簡單的代碼,一運行就出錯,提示錯誤在“Set *urce = lackrs”,錯誤就是“對象關閉時,不允許操作”。
郁悶ing。,這哪來的錯誤呢?我根本沒關閉數據庫連接,其他內容也是沒有問題的呀。
花了很長時間沒能解決,大清早再打開電腦時,靈機一動,搞定了。這里將這種現象作下總結,順便記錄一下本次解決過程。
產生這種現象有幾種原因:1、數據庫對象連接被關閉了,這肯定會報錯的,當然也不能輸出任何結果的,這時只需注意“先使用、后關閉”就行了,解決這樣的問題就是暫時先不要關閉數據庫連接就行了。2、返回記錄為空時,也會報錯。
如下面的代碼 sql = select * from dbcn where 狀態='0' Set rs = *e(sql) If Not * Then For m = 1 To *Count List_*m rs(1) & ( & rs(2) & ): & rs(4) *xt Next m End If 如果沒有數據的話,這里也會提示這樣的錯誤,將查詢代碼放到SQL查詢分析器里運行一下,果然沒有數據,呵呵。當然這樣的錯誤可以采用一些方法排除或過濾的。
3、這就是我這次所遇到的問題的中心了,我們將目光轉向存儲過程。的確,在SQL查詢分析器里,存儲過程是正常運行,而且不會報錯,也有數據。
但仔細想想,因為在存儲過程可能包含了有關SQL語句影響行數的信息,這樣一來也就可能會導致這樣的情況。打開存儲過程,在begin后面加上一句代碼:set nocount on,屏蔽掉這些信息。
OK,VB中的程序巳經能夠正常運行了,而且數據也是正常的。順便解釋一下吧,打開查詢分析器中的幫助,查找一下有關set nocount on的信息,我們會找到這些東西:==================================== SET NOCOUNT 使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。
語法 SET NOCOUNT { ON | OFF } 注釋 當 SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。當 SET NOCOUNT 為 OFF 時,返回計數。
即使當 SET NOCOUNT 為 ON 時,也更新 @@ROWCOUNT 函數。當 SET NOCOUNT 為 ON 時,將不給客戶端發送存儲過程中的每個語句的 DONE_IN_PROC 信息。
當使用 Microsoft? SQL Server? 提供的實用工具執行查詢時,在 Transact-SQL 語句(如 SELECT、INSERT、UPDATE 和 DELETE)結束時將不會在查詢結果中顯示nn rows affected。如果存儲過程中包含的一些語句并不返回許多實際的數據,則該設置由于大量減少了網絡流量,因此可顯著提高性能。
SET NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。權限 SET NOCOUNT 權限默認授予所有用戶。
示例 下例在 osql 實用工具或 SQL Server 查詢分析器中執行時,可防止顯示有關受影響的行數的信息。USE pubs GO-- Display the count * au_lname FROM authors GO USE pubs GO-- SET NOCOUNT to ON and no longer display the count * NOCOUNT ON GO SELECT au_lname FROM authors GO-- Reset SET NOCOUNT to * NOCOUNT OFF GO 這里點到為止吧,具體的解釋我想MS的幫助會比我說的更專業更清楚些,參考下吧。