C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 131 を表示中)
■77751 / )  Re[9]: ADOのコンパイルおよび組み込み
□投稿者/ tarou (7回)-(2015/11/20(Fri) 13:43:25)
魔界の仮面弁士
ご指摘ありがとうございました。

>> "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & m_sMdbPath & ";"
>> "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" & m_sMdbPath & ";" + "Jet OLEDB:Engine Type=5;"
> 何故、最後の一つだけ、文字列連結に「&」ではなく「+」を使っているのでしょうか?
> VB では + で繋ぐことにメリットが無いので、& に変更されることをお奨めします。

&に変更させて頂きました。

> ついでに言えば、連結処理がそもそも冗長で、
>  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sMdbPath & ";Jet OLEDB:Engine Type=5;"
> あるいは
>  "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & m_sMdbPath
> で十分でしょう。

こちらも変更させて頂きました。

> なお、"Jet OLEDB:Engine Type" は、JRO.JetEngine.CompactDatabase メソッドでは意味を持ちますが、
> ADODB.Connection.Open や System.Data.OleDb.OleDbConnection.Open メソッドでは無視されるようなので、
> 接続文字列として指定しても、あまり意味は無いかもしれません。
> (開いた後で動的プロパティを見ると、データソースに応じたバージョン値が設定されます)
"Jet OLEDB:Engine Type"の接続文字列は、消去させていただきました。
接続文字列について意味がよくわかっていませんでした。ご説明有難うございます。


>> MRComObject(m_objTbls)
> System.Runtime.InteropServices.Marshal.ReleaseComObject を呼ぶためのメソッドですかね
ご指摘の通りです。説明不足でした。申し訳ございません。
以下がその関数ですが、見ようみまねで、作成したものです。
引数がByref、Byval どちらが妥当なのか等、まだまだ、私の中ではすっきりと、
解決できていません。そもそも関数にしてよいのかも、正直迷っています。

Public Shared Sub MRComObject(ByRef objCom As Object)
'COM オブジェクトの使用後、明示的に COM オブジェクトへの参照を解放する
Try
'提供されたランタイム呼び出し可能ラッパーの参照カウントをデクリメントします
If Not objCom Is Nothing AndAlso System.Runtime.InteropServices. _
Marshal.IsComObject(objCom) Then
Dim I As Integer
Do
I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
objCom = Nothing
Loop Until I <= 0
End If
Catch
Finally
'参照を解除する
objCom = Nothing
End Try
End Sub

もし、宜しければご教授頂けないでしょうか。

返信 編集キー/


管理者用

- Child Tree -