vb執行sql語句
Ⅰ 菜鳥咨詢下如何在VB里 執行sql 語句
DimAdoCnAsNewADODB.Connection
strSql="select*from表名"
AdoCn.Execute(strSql)
定義一個ADO對象 然後調用Execute執行sql
Ⅱ 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
Ⅲ VB 執行SQL語句
VB中「對象關閉時,不允許操作」解決方案
最近兩天在VB里弄一些小程序,好久沒接觸了,感覺有些陌生了,還算有點基礎吧,遇到一些小的難題基本上都能解決。不過,這下真的遇到難題了,琢磨半天硬是沒弄出結果來,在網上查資料也沒個底,如同大海撈針呀,關鍵是沒一點正經的答案和可行的方案。
問題是這樣的,在VB中執行存儲過程,想輸出返回值並將數據綁定到DataGrid控制項中,本來是件小菜的問題,在.NET、ASP里都做通過,但在VB里卻是折磨了半天也沒弄出來。還是自己動手吧,有問題就得想辦法,一步步來吧。
先在SQL 2000中寫好存儲過程了,(這里不再寫出存儲過程的具體代碼了,也就是一個返回值,一個記錄集)然後在VB中引用ADO對象,輸入如下代碼,以調用存儲過程:
Dim lackconn As New ADODB.Connection
lackconn.ConnectionString=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=boyd;Initial Catalog=mydb;Data Source=(local)
lackconn.CursorLocation = adUseClient '設置為客戶端
lackconn.Open
Set lackcmd = New ADODB.Command
lackcmd.ActiveConnection = lackconn
lackcmd.CommandText = myproc '這里為存儲過程名稱
lackcmd.CommandType = adCmdStoredProc '指定為存儲過程
Set param = lackcmd.CreateParameter(@num, adInteger, adParamReturnValue, 4) '@num為返回值
lackcmd.Parameters.Append param
Set lackrs = New ADODB.Recordset
Set lackrs = lackcmd.Execute()
msgbox 站點總數: & lackcmd.Parameters(@num).Value & 個
Set mydatagrid.DataSource = lackrs 'mydatagrid為對象名稱
mydatagrid.Refresh '刷新DataGrid
'下面關閉資料庫對象等略去
就這樣的一個簡單的代碼,一運行就出錯,提示錯誤在「Set mydatagrid.DataSource = lackrs」,錯誤就是「對象關閉時,不允許操作」。郁悶ing...,這哪來的錯誤呢?我根本沒關閉資料庫連接,其他內容也是沒有問題的呀。花了很長時間沒能解決,大清早再打開電腦時,靈機一動,搞定了。這里將這種現象作下總結,順便記錄一下本次解決過程。
產生這種現象有幾種原因:
1、資料庫對象連接被關閉了,這肯定會報錯的,當然也不能輸出任何結果的,這時只需注意「先使用、後關閉」就行了,解決這樣的問題就是暫時先不要關閉資料庫連接就行了。
2、返回記錄為空時,也會報錯。如下面的代碼
sql = select * from dbcn where 狀態='0'
Set rs = conn.Execute(sql)
If Not rs.EOF Then
For m = 1 To rs.RecordCount
List_status.AddItem rs(1) & ( & rs(2) & ): & rs(4)
rs.MoveNext
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 message.
SELECT au_lname
FROM authors
GO
USE pubs
GO
-- SET NOCOUNT to ON and no longer display the count message.
SET NOCOUNT ON
GO
SELECT au_lname
FROM authors
GO
-- Reset SET NOCOUNT to OFF.
SET NOCOUNT OFF
GO
這里點到為止吧,具體的解釋我想MS的幫助會比我說的更專業更清楚些,參考下吧。
Ⅳ VB 中執行SQL語句
分析:
truncate table charge ;此句執行方法是一次性刪除charge中所有數據,執行出錯時無法回滾事務。
delete from Charge ;此句執行方法是按主鍵逐行刪除charge中所有數據,執行出錯時可以作回滾事務。
速度上是truncate 比delete要快的多。
Ⅳ VB操作SQL,是必須先寫與SQL連接的語句才能在VB中使用SQL的語句指令嗎
不是先寫連接語句,是先要打開連接,然後才能向資料庫伺服器發送sql執行,然後獲得結果。
Ⅵ vb中如何執行SQL語句
Private Sub Command1_Click()
On Error GoTo errhandle
Dim conn As New ADODB.Connection, rs As New ADODB.Recordset
If Trim(Text1.Text) = "" Then
MsgBox "沒有輸入sql語句"
Exit Sub
Else
If Left(Trim(Text1.Text), 6) = "select" Then
MsgBox "不是查詢語句"
Exit Sub
End If
End If
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "test.mdb;Persist Security Info=False"
rs.Open Trim(Text1.Text), conn, adOpenKeyset, adLockOptimistic
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
Set rs = Nothing
Set conn = Nothing
rs.Close
conn.Close
Exit Sub
errhandle:
MsgBox "輸入的sql語句有誤"
End Sub
Ⅶ VB執行SQL語句耗時太久導致程序假死怎麼處理
不管是用存儲過程還是直接用SQL語句,大數據量操作都會造成假死,可以嘗試以下思路:
將一次性執行分成多次執行,比如全表替換,為了較好的用戶體驗,可以逐行替換,然後在循環里加DoEvents配合顯示一個進度條。
或者,使用VB多線程技術(如ActiveXEXE)非同步執行,主線程循環中加DoEvents等待執行數據操作的線程結束的信息。
或者,使用SQLSERVER2005以上版本支持的ServiceBroker,構建一個非同步信息,在信息接收端執行數據操作,具體步驟可GOOGLE網站的SQLSERVER非同步觸發器。
附:
非同步執行就不會假死了,不過執行未完時最好不要作對這個過程有影響的操作.
java">PrivateWithEventsCssAsADODB.Connection
'''''''
Css.Execute"updatetable1seta='x',b='y'",,adAsyncExecute
PrivateSubcss_ExecuteComplete(ByValRecordsAffectedAsLong,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByValpCommandAsADODB.Command,ByValpRecordsetAsADODB.Recordset,ByValpConnectionAsADODB.Connection)
OnErrorGoToEE
MsgBox"更新完畢."
Css.Close:SetCss=Nothing
ExitSub
EE:
SetCss=Nothing
EndSub