- PR -

SqlClient.SqlConnectionの完全なクローズ

1
投稿者投稿内容
ぶん
会議室デビュー日: 2005/02/04
投稿数: 4
投稿日時: 2005-02-04 22:53
はじめまして。初心者です。

SqlClientを使用して、PC側のSQL Server 2000のデータベース
に接続しています。

下記のように単純にデータベースをオープンし、クローズしている
だけなのですが、何度も繰り返しているうちに時間がかかるように
なり、果てはフリーズしたようにかたまってしまいます。
クローズは、「sqlConn.Close」だけでは駄目なのでしょうか?

-----------------------------------------------------------------
Public sqlConn As SqlClient.SqlConnection
Public sqlCmd As SqlClient.SqlCommand

'オープン時
sqlConn = New SqlClient.SqlConnection("Data Source=....")
sqlCmd = New SqlClient.SqlCommand
sqlConn.Open()

'クローズ時
sqlConn.Close()
-----------------------------------------------------------------
<環境>
XP Pro SP1
Microsoft Visual Basic .NET 2003
ターゲットはスマートアプリケーション(CE .NET)
使用しているエミュレータは、バージョン4.1.0
エミュレータ上のメモリは、
データ記憶用  有効領域 2496KB
プログラム実行用有効領域 6736KB
となっています。


デバイスがない為、エミュレータのみです。
実際に、デバイスへインストールしても同様の現象がでてしまう
のか不安です。よろしくお願いします。
情報が不足していましたらすいません。
中博俊
ベテラン
会議室デビュー日: 2004/10/17
投稿数: 91
お住まい・勤務地: 大阪市
投稿日時: 2005-02-04 22:58
sqlConn.Dispose
というかusingしましょう。
ぶん
会議室デビュー日: 2005/02/04
投稿数: 4
投稿日時: 2005-02-04 23:05
sqlConn.Dispose
というかusingしましょう。


中 博俊さん
早速、ありがとうございます。
VBを使っているのですが、
sqlConn.Dispose
とすると下記のメッセージがでます。
「usingしましょう」もよくわからないのです。すいません。

'System.ComponentModel.Component.Protected Overridable Sub Dispose(disposing As Boolean)' は 'Protected' であるため、このコンテキストではアクセスできません。

おふぃすこま
常連さん
会議室デビュー日: 2005/01/24
投稿数: 22
投稿日時: 2005-02-04 23:46
こんにちは。おふぃすこまです。

とりあえず
アンマネージ リソースをクリーンアップするための Finalize および Dispose の実装
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconfinalizedispose.asp
を見てみては如何でしょう?
最初は難しく感じるかもしれませんが、何事も調べる事が肝心と言う事で・・・
↑自分にも言い聞かしてみる(^^;
ぶん
会議室デビュー日: 2005/02/04
投稿数: 4
投稿日時: 2005-02-04 23:53
おふぃすこま さん

ありがとうございます。おっしゃる通りです(^^;
こちらを参考に頑張って調べてみます。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-02-05 02:15
引用:

ぶんさんの書き込み (2005-02-04 23:05) より:
sqlConn.Dispose
というかusingしましょう。


中 博俊さん
早速、ありがとうございます。
VBを使っているのですが、
sqlConn.Dispose
とすると下記のメッセージがでます。
「usingしましょう」もよくわからないのです。すいません。

'System.ComponentModel.Component.Protected Overridable Sub Dispose(disposing As Boolean)' は 'Protected' であるため、このコンテキストではアクセスできません。





VB.NETはusingがありませんからね。
下記のコードで代替。

try
'オープン時
sqlConn = New SqlClient.SqlConnection("Data Source=....")
sqlCmd = New SqlClient.SqlCommand
sqlConn.Open()
catch ex as exception
'.....
finally
sqlConn.Close()
end try
ぶん
会議室デビュー日: 2005/02/04
投稿数: 4
投稿日時: 2005-02-05 05:00
NAL-6295さん、ありがとうございました。
返信が遅れてすいませんでした。
今まで、おふぃすこまさんに教わったURLで勉強してましたが、
おふぃすこまさんのおっしゃる通り難しくて・・
基礎から勉強しなおしますです(^^

NAL-6295さんの代替コード早速試してみます。
みなさん、ありがとうございました。
中博俊
ベテラン
会議室デビュー日: 2004/10/17
投稿数: 91
お住まい・勤務地: 大阪市
投稿日時: 2005-02-05 14:31
VBでしたか失礼失礼
先のソースじゃダメです。こんな感じでどうぞ。

Dim sqlConn As SqlConnection
Dim sqlCmd As SqlCommand
Try
 sqlConn = New SqlClient.SqlConnection("Data Source=....")
 Try
  sqlCmd = New SqlClient.SqlCommand
 Catch ex As Exception
  If (IsNothing(sqlCmd) = False) Then
   sqlCmd.Dispose()
  End If
 End Try
Catch ex As Exception
 '.....
Finally
 If (IsNothing(sqlConn) = False) Then
  sqlConn.Close()
  sqlConn.Dispose()
 End If
End Try

1

スキルアップ/キャリアアップ(JOB@IT)