當前位置:偏方大全网 - 藥品查詢 - VB執行SQL語句

VB執行SQL語句

VB中“對象關閉時不允許操作”的解決方案

這兩天弄了幾個VB的小程序。很久沒有接觸過他們了,感覺有些陌生。我有點基礎,基本能解決壹些小問題。但是,這次我真的遇到了壹個問題。只是琢磨了半天也沒個結果,在網上查資料也沒個底,就像大海撈針壹樣。關鍵是沒有認真的回答和可行的方案。

問題是這樣的:在VB中執行壹個存儲過程,並試圖輸出返回值,將數據綁定到DataGrid控件,本來是壹個微不足道的問題,傳了進來。NET和ASP,但是在VB中被折磨了很久。自己動手。有問題就要想辦法壹步壹步來。

先用SQL 2000寫存儲過程(這裏不再寫存儲過程的具體代碼,就是壹個返回值和壹個記錄集),然後引用VB中的ADO對象,輸入下面的代碼調用存儲過程:

Dim lackconn作為新的ADODB。關系

拉克康恩。ConnectionString = Provider = SQL oledb . 1;Persist安全信息= False用戶ID = sa密碼= boyd初始目錄= mydb數據源=(本地)

拉克康恩。“CursorLocation = aduseclient”被設置為客戶端。

拉克康恩。打開

設置lackcmd = New ADODB。命令

lackcmd。ActiveConnection = lackconn

Lackcmd。“CommandText = myproc”這是存儲過程的名稱。

Lackcmd。“commandtype = adcmdstoredproc”被指定為存儲過程。

set param = lack MD . create parameter(@ num,adinger,adparamreturnvalue,4)' @ num為返回值。

lackcmd。參數。附加參數

設置lackrs = New ADODB。記錄集

設置lackrs = lackcmd。執行()

msgbox站點總數:&;lackcmd。參數(@num)。價值與價值。個人

設置mydatagrid。datasource = lacurs的mydatagrid是對象名。

我的數據網格。“刷新”刷新數據網格。

關閉下面的數據庫對象並忽略它。

這樣壹個簡單的代碼在運行時會出錯,指出錯誤是“set mydatagrid”。datasource = lacurs”,錯誤為“對象關閉時不允許操作”。抑郁ing...這哪裏出問題了?我根本沒有關閉數據庫連接,其他內容都沒問題。解了很久,但是壹大早打開電腦,靈機壹動,搞定了。這種現象就總結到這裏,順便記錄下求解過程。

這種現象有幾個原因:

1,數據庫對象連接關閉,肯定會給出錯誤,當然也不能輸出任何結果。這時候只要註意“先用,後關”就可以了。要解決這個問題,只是暫時不要關閉數據庫連接。

2.當返回的記錄為空時,也會報告壹個錯誤。例如下面的代碼

SQL = select * from dbcn where status = ' 0 '

Set rs = conn.Execute(sql)

如果不是rs。那麽EOF

對於m = 1至rs。記錄計數

列表_狀態。AddItem rs(1)和amp(& amprs(2)和amp):& amprs(4)

rs。下壹步

下壹個m

如果…就會結束

如果沒有數據,這裏也會提示這個錯誤。將查詢代碼放入SQL查詢分析器並運行它。果然沒有數據,呵呵。當然,這樣的錯誤是可以通過壹些方法消除或過濾的。

3.這是我這次遇到的問題的中心。我們將註意力轉向存儲過程。的確,在SQL查詢分析器中,存儲過程運行正常,沒有錯誤和數據。但是仔細想想,因為存儲過程可能包含SQL語句影響的行數的信息,也可能導致這樣的情況。

打開存儲過程,並在begin: set nocount on之後添加壹段代碼,以屏蔽此信息。好了,VB中的程序已經可以正常運行了,數據正常。

順便打開查詢分析器中的幫助,查找關於set nocount on的信息,我們會發現這些東西:

====================================

設置NOCOUNT

導致返回的結果不包含受Transact-SQL語句影響的行數的信息。

語法

設置NOCOUNT { ON | OFF }

給…作註解

當SET NOCOUNT為ON時,不返回計數(表示受Transact-SQL語句影響的行數)。當SET NOCOUNT為OFF時,返回計數。

即使SET NOCOUNT為ON,也要更新@@ROWCOUNT函數。

當SET NOCOUNT為ON時,存儲過程中每個語句的DONE_IN_PROC信息將不會發送到客戶端。用微軟的時候?SQL Server?當提供的實用工具執行查詢時,受影響的nn行將不會顯示在Transact-SQL語句(如SELECT、INSERT、UPDATE和DELETE)末尾的查詢結果中。

如果存儲過程中包含的某些語句不返回太多實際數據,則此設置可以顯著提高性能,因為它大大減少了網絡流量。

SET NOCOUNT設置在執行或運行時設置,而不是在分析時設置。

權限

默認情況下,SET NOCOUNT權限授予所有用戶。

例子

以下示例防止在osql實用工具或SQL Server查詢分析器中執行時顯示有關受影響行數的信息。

使用酒吧

-顯示計數信息。

選擇au_lname

來自作者

使用酒吧

-將NOCOUNT設置為ON,不再顯示計數信息。

設置NOCOUNT ON

選擇au_lname

來自作者

-將SET NOCOUNT重置為OFF。

設置NOCOUNT關閉

我們到此為止吧。我覺得MS的幫助會比我說的更專業,更清晰。請參考。

  • 上一篇:木香順氣丸說明書
  • 下一篇:家庭藥箱該如何合理配備?
  • copyright 2024偏方大全网