vb.net把對象關(guān)閉 vb不能關(guān)閉的窗口

如何用VB實(shí)現(xiàn)關(guān)閉所有數(shù)據(jù)庫對象

如果你在程序中使用了任何數(shù)據(jù)庫對象(DAO,

創(chuàng)新互聯(lián)專注于黃巖企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),電子商務(wù)商城網(wǎng)站建設(shè)。黃巖網(wǎng)站建設(shè)公司,為黃巖等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

RDO,

或者

ADO),

在退出程序之前,你必須確認(rèn)已經(jīng)關(guān)閉掉了所有已經(jīng)打開的記錄、數(shù)據(jù)庫和數(shù)據(jù)工作臺(tái)(recordsets,

databases,

and

workspaces)。雖然退出程序時(shí)這些對象的指針都被自動(dòng)施放了,但是如果你自己又不能確認(rèn)是否真正地釋放了打開的數(shù)據(jù)庫對象,那么就有可能數(shù)據(jù)庫連接沒有馬上被釋放掉,從而被這些對象所占用的內(nèi)存就再也不能被操作系統(tǒng)再次分配。

----

下面有一段放在Form_Unload

事件(或者其他退出模塊中)中的一小段代碼例子,它演示了關(guān)閉所有打開的DAO

工作臺(tái)、數(shù)據(jù)庫和記錄并釋放了被這些對象占用的內(nèi)存。當(dāng)你退出FORM時(shí),不論在有一個(gè)、100個(gè)甚至沒有數(shù)據(jù)庫連接時(shí)都可以使用下面代碼。

Private

Sub

Form_Unload(Cancel

As

Integer)

'

關(guān)閉數(shù)據(jù)庫對象并且釋放內(nèi)存

VB連接數(shù)據(jù)庫出現(xiàn)“對象關(guān)閉時(shí),不允許操作”的錯(cuò)誤,急!

VB中“對象關(guān)閉時(shí),不允許操作”解決方案

最近兩天在VB里弄一些小程序,好久沒接觸了,感覺有些陌生了,還算有點(diǎn)基礎(chǔ)吧,遇到一些小的難題基本上都能解決。不過,這下真的遇到難題了,琢磨半天硬是沒弄出結(jié)果來,在網(wǎng)上查資料也沒個(gè)底,如同大海撈針呀,關(guān)鍵是沒一點(diǎn)正經(jīng)的答案和可行的方案。

問題是這樣的,在VB中執(zhí)行存儲(chǔ)過程,想輸出返回值并將數(shù)據(jù)綁定到DataGrid控件中,本來是件小菜的問題,在.NET、ASP里都做通過,但在VB里卻是折磨了半天也沒弄出來。還是自己動(dòng)手吧,有問題就得想辦法,一步步來吧。

先在SQL 2000中寫好存儲(chǔ)過程了,(這里不再寫出存儲(chǔ)過程的具體代碼了,也就是一個(gè)返回值,一個(gè)記錄集)然后在VB中引用ADO對象,輸入如下代碼,以調(diào)用存儲(chǔ)過程:

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 '設(shè)置為客戶端

lackconn.Open

Set lackcmd = New ADODB.Command

lackcmd.ActiveConnection = lackconn

lackcmd.CommandText = myproc '這里為存儲(chǔ)過程名稱

lackcmd.CommandType = adCmdStoredProc '指定為存儲(chǔ)過程

Set param = lackcmd.CreateParameter(@num, adInteger, adParamReturnValue, 4) '@num為返回值

lackcmd.Parameters.Append param

Set lackrs = New ADODB.Recordset

Set lackrs = lackcmd.Execute()

msgbox 站點(diǎn)總數(shù): lackcmd.Parameters(@num).Value 個(gè)

Set mydatagrid.DataSource = lackrs 'mydatagrid為對象名稱

mydatagrid.Refresh '刷新DataGrid

'下面關(guān)閉數(shù)據(jù)庫對象等略去

就這樣的一個(gè)簡單的代碼,一運(yùn)行就出錯(cuò),提示錯(cuò)誤在“Set mydatagrid.DataSource = lackrs”,錯(cuò)誤就是“對象關(guān)閉時(shí),不允許操作”。郁悶ing...,這哪來的錯(cuò)誤呢?我根本沒關(guān)閉數(shù)據(jù)庫連接,其他內(nèi)容也是沒有問題的呀?;撕荛L時(shí)間沒能解決,大清早再打開電腦時(shí),靈機(jī)一動(dòng),搞定了。這里將這種現(xiàn)象作下總結(jié),順便記錄一下本次解決過程。

產(chǎn)生這種現(xiàn)象有幾種原因:

1、數(shù)據(jù)庫對象連接被關(guān)閉了,這肯定會(huì)報(bào)錯(cuò)的,當(dāng)然也不能輸出任何結(jié)果的,這時(shí)只需注意“先使用、后關(guān)閉”就行了,解決這樣的問題就是暫時(shí)先不要關(guān)閉數(shù)據(jù)庫連接就行了。

2、返回記錄為空時(shí),也會(huì)報(bào)錯(cuò)。如下面的代碼

sql = select * from dbcn where 狀態(tài)='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

如果沒有數(shù)據(jù)的話,這里也會(huì)提示這樣的錯(cuò)誤,將查詢代碼放到SQL查詢分析器里運(yùn)行一下,果然沒有數(shù)據(jù),呵呵。當(dāng)然這樣的錯(cuò)誤可以采用一些方法排除或過濾的。

3、這就是我這次所遇到的問題的中心了,我們將目光轉(zhuǎn)向存儲(chǔ)過程。的確,在SQL查詢分析器里,存儲(chǔ)過程是正常運(yùn)行,而且不會(huì)報(bào)錯(cuò),也有數(shù)據(jù)。但仔細(xì)想想,因?yàn)樵诖鎯?chǔ)過程可能包含了有關(guān)SQL語句影響行數(shù)的信息,這樣一來也就可能會(huì)導(dǎo)致這樣的情況。

打開存儲(chǔ)過程,在begin后面加上一句代碼:set nocount on,屏蔽掉這些信息。OK,VB中的程序巳經(jīng)能夠正常運(yùn)行了,而且數(shù)據(jù)也是正常的。

順便解釋一下吧,打開查詢分析器中的幫助,查找一下有關(guān)set nocount on的信息,我們會(huì)找到這些東西:

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

SET NOCOUNT

使返回的結(jié)果中不包含有關(guān)受 Transact-SQL 語句影響的行數(shù)的信息。

語法

SET NOCOUNT { ON | OFF }

注釋

當(dāng) SET NOCOUNT 為 ON 時(shí),不返回計(jì)數(shù)(表示受 Transact-SQL 語句影響的行數(shù))。當(dāng) SET NOCOUNT 為 OFF 時(shí),返回計(jì)數(shù)。

即使當(dāng) SET NOCOUNT 為 ON 時(shí),也更新 @@ROWCOUNT 函數(shù)。

當(dāng) SET NOCOUNT 為 ON 時(shí),將不給客戶端發(fā)送存儲(chǔ)過程中的每個(gè)語句的 DONE_IN_PROC 信息。當(dāng)使用 Microsoft? SQL Server? 提供的實(shí)用工具執(zhí)行查詢時(shí),在 Transact-SQL 語句(如 SELECT、INSERT、UPDATE 和 DELETE)結(jié)束時(shí)將不會(huì)在查詢結(jié)果中顯示nn rows affected。

如果存儲(chǔ)過程中包含的一些語句并不返回許多實(shí)際的數(shù)據(jù),則該設(shè)置由于大量減少了網(wǎng)絡(luò)流量,因此可顯著提高性能。

SET NOCOUNT 設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。

權(quán)限

SET NOCOUNT 權(quán)限默認(rèn)授予所有用戶。

示例

下例在 osql 實(shí)用工具或 SQL Server 查詢分析器中執(zhí)行時(shí),可防止顯示有關(guān)受影響的行數(shù)的信息。

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

這里點(diǎn)到為止吧,具體的解釋我想MS的幫助會(huì)比我說的更專業(yè)更清楚些,參考下吧。

VB對象關(guān)閉時(shí),不允許操作

private

sub

command3_click()

pubconn.close

pubconn.open

strconn

你在這里把pubconn關(guān)閉了,而前面

rstable.open

strsql,

pubconn,

adopendynamic,

adlockoptimistic

使用

close

方法關(guān)閉

connection

對象還將關(guān)閉與連接相關(guān)聯(lián)的任何活動(dòng)

recordset

對象。

所以rstable也被關(guān)閉了,所以是對象關(guān)閉時(shí),不允許操作。

vb.net怎么把對象真正的立即釋放掉

.NET目前的垃圾回收機(jī)制不能實(shí)現(xiàn)把對象真正的立即釋放掉,GC會(huì)對垃圾進(jìn)行管理,如果垃圾沒有引用計(jì)數(shù)了,就會(huì)被回收。

編碼的時(shí)候能用托管類盡量用托管類去實(shí)現(xiàn)你的功能,

對于實(shí)現(xiàn)了IDisposable接口的類,用完了記得調(diào)用close或者Dispose又或者相應(yīng)的方法去釋放資源,最好吧使用using語句塊;

對于Com對象,用完了先關(guān)閉,然后調(diào)用Runtime.InteropServices.Marshal.FinalReleaseComObject()方法把Com對象的引用計(jì)數(shù)設(shè)置為0。當(dāng) COM 對象的引用計(jì)數(shù)變?yōu)?0 時(shí),通常會(huì)釋放 COM 對象,不過這取決于 COM

對象的實(shí)現(xiàn),而不是運(yùn)行時(shí)可以控制的。最后調(diào)用ComObj = Nothing以釋放ComObj持有的引用。不過要注意,只有當(dāng)ComObj的生存期相對于垃圾回收器用于檢測孤立對象的時(shí)間來說很長時(shí),你才應(yīng)該將變量設(shè)置為 Nothing。

有部分來自MSDN

怎樣才能用VB.NET的代碼來關(guān)閉一個(gè)在運(yùn)行的程序

軟糖來回答羅:通過System.Diagnostics命名空間下的Process類來關(guān)閉程序的進(jìn)程

Dim?進(jìn)程集合?=?Process.GetProcessesByName("進(jìn)程名稱")

For?Each?進(jìn)程?In?進(jìn)程集合

進(jìn)程.Kill()

'進(jìn)程.Close()?'或者使用關(guān)閉

Next

也可以先獲取所有進(jìn)程,再來判斷這些進(jìn)程的名稱ProcessName

Dim?獲取本地所有進(jìn)程?=?Process.GetProcesses()

For?Each?進(jìn)程?In?獲取本地所有進(jìn)程

If?進(jìn)程.ProcessName?=?"explorer.exe"?Then?進(jìn)程.Kill()

Next

新聞名稱:vb.net把對象關(guān)閉 vb不能關(guān)閉的窗口
文章起源:http://www.muchs.cn/article42/hggihc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站營銷、自適應(yīng)網(wǎng)站網(wǎng)站設(shè)計(jì)公司、企業(yè)建站面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名