A.1. Features and Limitations/機能と制限
A.2. Installing and Using ADOLibrary/ADOLibraryのインストールと使用方法
A.3. ADOLibrary Reference/ADOLibraryリファレンス
One of the most complex problems in migrating a VB6/COM application to .NET is the conversion of legacy database access techniques to ADO.NET.
VB6とCOMのアプリーケーションを.NETに移行する場合のもっとも複雑な問題のひとつは ADO.NET. に対するレガシーなデータベース接続技法の変換です。
ADO.NET differs from all the database access libraries that were popular in the VB6 days, including ADODB, DAO, and RDO. Most notably, ADO.NET promotes the so-called “disconnected” approach to database processing: data is brought from the server to the client, where it can be processed locally, and then all (and only) the changes are uploaded back to the database. Another important difference is that ADO.NET doesn’t offer any kind of support for server-side cursors, such as keysets and dynamic cursors.
ADO.NETはADODBやDAO、RDOのようなVB6時代によく使われていたどんなデータベース接続ライブラリとも異なります。もっとも顕著なのは、ADO.NETがいわゆる「disconnected」アプローチをデータベース処理に用いていたことです。すなわち、サーバーからクライアントに伝達されたデータはローカルで処理され、変更されたデータ(または差分)はデータベースに戻されます。次に重要な違いはADO.NETがキーセットや動的カーソルのようなサーバーサイドのカーソルを何もサポートしないということです。
Of all the three database object models available to VB6 developers, only ADODB supports a programming model that is “enough” similar to ADO.NET’s disconnected approach. ADODB allows you to open a client-side recordset and use batch updates commands with optimistic lock, client-side disconnected recordsets are akin to ADO.NET’s DataTables, and server-side forwardonly-readonly (FO-RO) recordsets are similar to ADO.NET DataReader objects.
VB6開発者対して有効な三つのデータベースオブジェクトモデルの中で、ADODBのみADO.NET disconnectedアプローチに「匹敵」するプログラミングモデルをサポートします。ADODBによってクライアント側のレコードセットを開き、楽観的ロックによる一括更新コマンドを使用することができますし、クライアント側のdisconnectedレコードセットはADO.NETのデータテーブルと同種のものであり、サーバー側のforwardonly-readonly(FO-RO)レコードセットはADO.NETのDataReaderオブジェクトと似ています。
Thanks to this similarity, converting a VB6/ADODB application to VB.NET/ADO.NET is relatively simple, at least according to many articles about VB6 migration. The truth is different, however, for at least two reasons. First, few commercial VB6 applications use disconnected recordsets and FO-RO recordsets exclusively, and many of them relies on server-side cursors, such as keysets. Second, the ADODB and ADO.NET object models differ in so many details – parameterized commands, store procedure invocation, field attributes, just to name a few – that the number of necessary manual adjustments is very high and defeats the convenience of automatic migration software.
この類似性のおかげで、VB6とADODBのアプリケーションをVB.NETとADO.NETに移行するのは、少なくともVB6移行についての多くの記事によれば、比較的シンプルです。しかし、少なくとも二つの理由によって、真実は異なります。まず、disconnectedレコードセットやFO-ROレコードセットのみを使う商用のVB6アプリケーションはほとんどありませんし、ほとんどのアプリケーションはキーセットのようなサーバーサイドカーソルに依存しています。次に、ADODBオブジェクトモデルとADO.NETオブジェクトモデルは詳細において多くの相違―ほんの少し名前を挙げるだけでも、パラメタライズドコマンド、ストアドプロシジャ呼び出し、フィールド属性など―がありますし、そのために必要となる手作業による調整工数は自動移行ツールの利便性を圧倒するものです。
We at CodeArchitects decided to solve the problem of ADODB-to-ADO.NET conversion in a new, revolutionary way.
コードアーキテクツ社において私たちは新しく革新的な方法でADODBからADO.NETへの移行の問題を解決することに決めました。
Rather than using our code converter to generate code that compensates for the many differences between the two object model – an approach that other vendors have adopted and that has proven to be largely insufficient for any real-world application – CodeArchitects has authored a .NET library named ADOLibrary, that is basically a hierarchy of ADO.NET objects that has exactly the same object model as and is functionally equivalent to ADODB.
弊社の移行ツールを使用して、ふたつのオブジェクトモデルの多くの相違を相殺するソースコードを生成するよりもむしろ―他のベンダーが適用していたアプローチであり、実際のアプリケーションに対しては非常に不十分であることが証明されているアプローチ―コードアーキテクツ社はADOLibraryという名の.NET libraryを作成しました。このライブラリは基本的にADO.NETの上位に位置づけられ、完全に同じオブジェクトモデルであり、機能的にADODBと同等です。
For example, the ADOLibrary contains a class named ADOConnection, which exposes the same properties, methods, and events as the ADODB.Connection object. Likewise, the ADORecordset object has the same programming interface – and, more important, the same behavior – as the ADODB.Recordset object, and so forth.
例えば、ADOLibraryはADOConnectionというクラスを含んでおり、このクラスはADODB.Connectionオブジェクトと同じプロパティとメソッドとイベントを持っています。同様に、ADORecordsetオブジェクトはADODB.Recordsetオブジェクトと同じプログラミングインターフェース―より重要なことは動作が同じであることです―を持っています。
Microsoft ADODB library and CodeArchitects’ ADOLibrary are very similar, except that
マイクロソフト社のADODBライブラリとコードアーキテクツのADOLibraryは次の点を除いてとても似ています。
- The name of each class is different (the ADODB.classname type corresponds to the CodeArchitects.ADOLibrary.ADOclassname type)
- 各クラスの名前が異なります(ADODB.classnameはCodeArchitects.ADOLibrary.ADOclassnameに対応します)。
- ADOLibrary is a “pure” .NET library and has no dependency on COM.
- ADOLibraryは「純粋な」.NETライブラリでありCOMに依存しません。
Thanks to feature a), once you have migrated a VB6 project to VB.NET, you can use a global Find & Replace command inside Visual Studio to replace all references to ADODB into references to ADOLibrary. Unless your project uses some ADODB features that ADOLibrary doesn’t support (see next sections), in the end you obtain a VB.NET project that behaves exactly like the original VB6 program except it uses ADO.NET objects exclusively.
aの特徴のお陰で、一旦VB6プロジェクトをVB.NETに変換すれば、ADODBに対する参照をすべてADOLibraryに対する参照に置換するためにVisual Studioのソリューション全体の検索と置換を使用することができます。ADOLibraryがサポートしないいくつかのADODBの機能(次の章を参照)をプロジェクトが使用していない限り、ADO.NETオブジェクトのみ使用している場合を除いて、最終的には、正確に元のVB6プログラムのように動作するVB.NETプロジェクトを作成することができます。
Notice that ADOLibrary doesn’t depend on VB Migration Partner and can be successfully used also if you have converted from VB6 manually, or by using Microsoft Upgrade Wizard, or by using a conversion tool from another vendor.
ADOLibraryがVB Migration Partnerに依存していないこと、VB6から手作業で移行した場合やマイクロソフト社のアップグレードウィザードや他社の移行ツールを使用して移行した場合にも問題なく使用できることは注目に値します。
Even if these two software components are independent from each other, ADOLibrary integrates perfectly with CodeArchitects’ VB Migration Partner. If convert from VB6 using our software, you don’t even need to perform any Find & Replace command, because all ADODB types are converted to types in ADOLibrary automatically, if you wish so.
たとえ、これら二つのソフトウェアコンポーネントがお互いに独立していても、ADOLibraryはコードアーキテクツ社のVB Migration Partnerと完全に統合します。弊社のソフトウェを使ってVB6から移行する場合、そう望めば、ADODBのすべての型はADOLibraryの型に自動的に変換されるので、検索と置換コマンドを使う必要さえありません。
A.1. Features and Limitations/機能と制限
ADOLibrary version 1.0 replicates and supports many of the most important ADODB features, including:
ADOLibraryのバージョン1.0は以下のADODBの最も重要な機能の多くを複製、サポートしております。
- Forwardonly-readonly (FO-RO) recordsets
- Forwardonly-readonly(FO-RO)レコードセット
- Client-side recordsets with optimistic batch updates
- 楽観的一括更新を備えたクライアントサイドのレコードセット
- Server-side cursors, including keysets, static and dynamic cursors (Microsoft SQL Server only)
- キーセット、静的・動的カーソルを含むサーバーサイドカーソル(Microsoft SQL Serverのみ)
- Standalone, disconnected recordsets (e.g. Dim rs As New Recordset) with custom Fields collection
- カスタムフィールドコレクションを備えたスタンドアロン型disconnectedレコードセット(例 Dim rs As New Recordset)
- Parameterized commands
- パラメタライズドコマンド
- Stored procedure calls, with input and output parameters
- 入手力パラメータを伴うストアドプロシジャ呼び出し
- Most dynamic properties, e.g. UpdateCriteria, UniqueTable and ResyncCommand
- UpdateCriteria、UniqueTable、ResyncCommandなど、多くのダイナミックプロパティ
ADOLibrary preserves one of the best ADODB features, namely the ability to interact with different databases by simply changing the ConnectionString property of the Connection object. Internally, ADOLibrary can use the most appropriate ADO.NET data provider. In version 1.0 the following providers are supported
ADOLibraryは最高のADODBの特徴の一つを引き継いでいます。すなわち、Connection オブジェクトのConnectionStringプロパティを変更するだけで異なるデータベースと相互に接続する機能です。内部で、ADOLibraryはもっとも適切なADO.NETデータプロバイダを使用します。バージョン1.0では次のプロバイダがサポートされています。
- System.Data.OleDb
- System.Data.SqlClient
Support for Oracle and ODBC providers will be added in future releases. (Current version can access Oracle databases by using the OleDb provider, though.)
OracleとODBC providersに対するサポートは将来のリリースで追加される予定です。(とはいえ、現在のバージョンはOleDb providerを使ってOracleのデータベースに接続することができます。)
Interestingly, many objects in the ADOLibrary expose additional properties and methods that aren’t found in ADODB and that allow you to leverage the best features of ADO.NET. For example, the ADORecordset class – in addition to all the members “inherited” from the ADODB.Recordset class – exposes the DataTable property, which returns the System.Data.DataTable object containing all the rows read from the database and transferred to the client-side cursor. Thanks to this property you can then read and write such rows either by using the MoveNext method (the ADODB way) or by directly accessing the DataTable object, as in following example:
興味深いことに、ADOLibraryの多くのオブジェクトにADODBにはないプロパティとメソッドが追加されており、ADO.NETの機能を最大限に引き出すことができます。例えば、ADORecordsetクラスはデータベースから読んだ行を含むSystem.Data.DataTableオブジェクトを返すDataTableプロパティを―ADODB.Recordsetクラスから「継承」されたメンバーとは別に―持っています。このプロパティのお陰で、MoveNextメソッドの使用またはDataTableオブジェクトを直接アクセスのどちらかによって以下の例のように行の読み書きができます。
Sub ReadRows(ByVal cn As ADOConnection, ByVal sql As String) Dim rs As New ADORecordset rs.CursorLocation = ADOCursorLocationEnum.adUseClient rs.Open(sql, cn, ADOCursorTypeEnum.adOpenStatic, _ ADOLockTypeEnum.adLockBatchOptimistic) ' access individual rows using ADODB-like approach Do Until rs.EOF Debug.WriteLine(rs(0).Value) '… rs.MoveNext() Loop ' access all rows together via the DataTable property For Each dr As DataRow in rs.DataTable.Rows Debug.WriteLine(dr(0)) '… Next ' you can also use the DataTable property to bind the recordset to a ' standard DataGridView control, or any other bindable .NET control DataGridView1.DataSource = rs.DataTable rs.BindingManager = Me.BindingManager End Sub
Limitations/機能制限
ADOLibrary doesn’t support all ADODB features. Here is the list of the main features that aren’t supported or are supported only partially:
ADOLibraryはADODBの機能すべてをサポートしているわけではありません。以下はサポートされていない機能と部分的にサポートしている機能の一覧です。
- Hierarchical recordsets aren’t supported.
- 階層型レコードセットはサポートされません。
- Server-side cursors (other than FO-RO cursors) are supported only for Microsoft SQL Server databases.
- (FO-ROカーソル以外の)サーバーサイドカーソルはMicrosoft SQL Serverのみサポートされます。
- Multiple, semicolon-delimited SQL statements are supported in Recordset.Open methods, but not in the Execute method of the Connection and Command objects.
- 複数のセミコロンで区切られたSQL文はRecordset.Openメソッドでサポートされますが、Connection オブジェクトとCommand オブジェクトのExecuteメソッドではサポートされません。
- Asynchronous execution is allowed for the Open method of Connection and Recordset objects, but not for the Execute method of the Connection and Command objects.
- 非同期実行はConnection オブジェクトとRecordset オブジェクトのOpenメソッドに対して許可されていますが、Connection オブジェクトとCommandオブジェクトのExecuteメソッドには許可されていません。
- The UpdateBatch method of the Recorset object requires that the SQL source statement includes the key fields of all involved tables and doesn’t work with old-syntax JOIN statements, with nested SELECT statements, and with derivate tables.
- RecorsetオブジェクトのUpdateBatchメソッドはSQL文が内包するテーブルすべてのキー列を含んでいる必要があり、古い構文のJOINステートメントやネストしたSELECT文や派生テーブルを使用していると動作しません。
- The SELECT statement used to open server-side keyset and dynamic cursors must include at least one non-nullable key column.
- サーバーサイドのキーセットや動的カーソルを呼び出すために使用されるSELECT文は少なくともひとつのnullを許可しないキー列に含まれていなければなりません。
- The Move method doesn’t work and raises an exception with serverside dynamic cursors.
- サーバーサイドの動的カーソルを伴う場合、Moveメソッドは動作せず、例外が発生します。
- The Index, Seek, MarshalOption, StayInSync members of the Recordset class aren’t implemented and are marked as obsolete.
- RecordsetクラスのIndex、Seek、MarshalOption、StayInSyncは実装されておらず、既に使用されていないメンバーとして認識されます。
- The PageSize, Clone, and Find members of the Recordset class aren’t implemented for keysets and other server-side cursors.
- RecordsetクラスのPageSize、Clone、Findはキーセットや他のサーバーサイドカーソル用には実装されていません。
- The CommandStream, Dialect, NamedParameters, and Prepared members of the Command class aren’t implemented and are marked as obsolete.
- CommandクラスのCommandStream、Dialect、NamedParameters、Preparedは実装されておらず、既に使用されていないメンバーとして認識されます。
- The ReadText, WriteText, and SkipLines methods of the Stream class aren’t implemented and are marked as obsolete.
- StreamクラスのReadText、WriteText、SkipLinesは実装されておらず、既に使用されていないメンバーとして認識されます。
- A few dynamic properties of the Connection or Recordset objects aren’t supported.
- ConnectionオブジェクトとRecordsetオブジェクトの2、3のダイナミックプロパティはサポートされません。
- The ADODB.Record class isn’t supported.
- ADODB.Recordクラスはサポートされません。
More details about these limitations are provided later in this document.
これらの詳細についての詳細は後述します。
A.2. Installing and Using ADOLibrary/ADOLibraryのインストールと使用方法
You can download ADOLibrary from VB Migration Partner’s Download page, which you can reach from the Help menu. (If you purchased ADOLibrary separatedly, you will receive the URL to this page via email.)
ADOLibrary はVB Migration Partnerのダウンロードページからダウンロードすることができます。また、ダウンロードページにはヘルプメニューから移動することもできます。(ADOLibraryだけを購入した場合、URLがemailで送付されます。)
If you are converting a VB6 application using VB Migration Partner, you can enable ADODB-to-ADO.NET conversion using the ADOLibrary in either of the following ways:
VB Migration Partner を使用してVB6アプリケーションを移行している場合、次のいずれかの方法でADOLibraryを使用したADODBからADO.NETへの変換を有効にすることができます。
- You copy the CodeArchitects.ADOLibrary.dll file into VB Migration Partner’s setup folder.
- VB Migration PartnerのセットアップフォルダにCodeArchitects.ADOLibrary.dllをコピーします。
- You use an AddLibraryPath pragma to point to the folder where you have stored the CodeArchitects.ADOLibrary.dll file, as in:
- 次のように、CodeArchitects.ADOLibrary.dllファイルを保存したフォルダを指定するAddLibraryPathプラグマを使います。
'## AddLibraryPath "c:\adolib"
Notice that the AddLibraryPath pragma can be only inserted in a *.pragmas file.
- 次のように、CodeArchitects.ADOLibrary.dllファイルを保存したフォルダを指定するAddLibraryPathプラグマを使います。
- AddLibraryPathプラグマは*.pragmasにのみ挿入することができることに注意してください。
- You use an ImportTypeLib pragma to alias the ADODB type library with the CodeArchitects.ADOLibrary.dll assembly:
- CodeArchitects.ADOLibrary.dllアセンブリとともにADODBタイプライブラリに別名をつけるImportTypeLibプラグマを使います。
'## ImportTypeLib msado27.tlb "@c:\adolib\CodeArchitects.AdoLibrary.dll"
Notice that the ImportTypeLib pragma can be only inserted in a *.pragmas file.
- CodeArchitects.ADOLibrary.dllアセンブリとともにADODBタイプライブラリに別名をつけるImportTypeLibプラグマを使います。
- ImportTypeLibプラグマは*.pragmasファイルにのみ挿入することができることに注意してください。
If you apply strategy A), then any VB6 project that references the ADODB type library will be converted to a VB.NET project that references the ADOLibrary instead. Strategies B) and C) allows you to be more granular, therefore they are the approaches we recommend if you want to preserve ADODB in some of your converted projects.
手順Aが行える場合、ADODBタイプライブラリを参照するVB6プロジェクトであれば何でも、代わりにADOLibraryを参照するVB.NETプロジェクトに変換されます。手順BとCの場合、より粗くなりまので、移行されるプロジェクトのいくつかでADODBを使用したい場合にこれらの手順をお勧めしています。
If you are not using VB Migration Partner – for example, you have migrated from VB6 either manually, or using Microsoft Upgrade Wizard (included in Visual Studio 2005 or 2008), or using a converted from another vendor – you can still adopt ADOLibrary. In this case, the manual procedure is as follows:
VB Migration Partnerを使用していない場合でも、―例えば、手作業でVB6から移行された場合や、(Visual Studio 2005か2008に含まれる)Microsoft Upgrade Wizardを使用された場合や、他社の移行ツールをご使用になられた場合―ADOLibraryを使用することができます。この場合の手順は次のようになります。
- Load the converted VB.NET project inside Visual Studio
- Visual Studioに変換するVB.NETプロジェクトを読み込んでください
- Open the References tab of the My Project designer
- My Projectプロパティの参照タブを開いてください
- Drop the reference to the ADODB.dll file (this will cause many compilation errors to appear)
- 参照するADODB.dllファイルをドロップしてください。(これによって多くのコンパイルエラーが発生します)
- Add a reference to the CodeArchitects.ADOLibrary.dll file
- CodeArchitects.ADOLibrary.dllファイルへの参照を追加してください
- Add “CodeArchitects.ADOLibrary” as a project-level imported namespace
- プロジェクトレベルのインポートされた名前空間にCodeArchitects.ADOLibraryを追加してください
- Using Visual Studio’s Find and Replace command, replace all occurrences of “ADODB.” (dot included) into “ADO” (this step should solve all compilation errors caused at point 3)
- Visual Studioの検索と置換コマンドを使って、見つかった「ADODB.」(.も含みます)をすべて「ADO」に置換してください。(この段階で手順3で発生したコンパイルエラーはすべてなくなります)
The effect of the last action is to replace class names such as “ADODB.Recorset” into “ADORecordset”, so that all statements that were using ADODB objects will now use the corresponding object in ADOLibrary.
最後の手順の効果は、クラス名を「ADODB.Recorset」から「ADORecordset」のように置換することです。これによって、ADODBオブジェクトを使用するすべてのステートメントがADOLibraryの対応するオブジェクトを使用するようになります。
A.3. ADOLibrary Reference/ADOLibraryリファレンス
This section describes each class in the library, with details on all the properties, methods, and events that might work differently from “classic” ADODB or that were added to the library to compensate for the differences between the two environments.
この章では、「古い」ADODBとは異なる動作をしたり、両者の相違を埋め合わせるためにライブラリ追加された各クラスのプロパティ、メソッド、そしてイベントについて解説します。
The ADOConfig class/ADOConfigクラス
ADOLibrary exposes a special ADOConfig class, which allows you to change the behavior of objects in the library and take full advantage of ADO.NET versatility, with just minor edits in source code. ADOConfig exposes static (Shared in VB.NET) properties exclusively.
ADOLibraryは特別なADOConfigクラスを持っており、ライブラリのオブジェクトの動作を変更することができ、ソースコードに小さな編集を加えるだけでADO.NETの多様性を完全に利用することができます。ADOConfigは静的プロパティ(VB.NETではShared)のみ持ちます。
BatchUpdatesSetAllValues property/BatchUpdatesSetAllValuesプロパティ
If this property is set to False (the default value) then UPDATE statements generated by UpdateBatch methods assign only the columns that have been modified. For example, if you have read Name, Company, and City fields from a given table and you later modify only the Name and Company fields, the UPDATE statement generated for that row when you issue the UpdateBatch method will assign only these two fields and won’t modify the value of the City field currently stored in the database.
このプロパティにFlaseをセットするとUpdateBatchメソッドによって生成されたUPDATE文は修正された列だけを対象とします。例えば、テーブルからName、Company、Cityフィールドを読み込んだ後で、NameとCompanyフィールドだけを修正した場合、UpdateBatchメソッドを使用しているときにその行に対して生成されるUPDATE文はこれらの二つのフィールドのみを対象とし、現在データベースに保存されているCityフィールドの値は修正しません。
Even if this behavior perfectly mimics what ADODB does, many developers consider it a design flaw of ADODB and would prefer the UpdateBatch method to assign all the fields in the row, regardless of whether they were modified by the client application. You can achieve this safer behavior by simply assigning True to the BatchUpdatesSetAllValues property:
たとえこの動作がADODBの動作を完全に複製したとしても、ほとんどの開発者はそれをADODBのデザイン上の欠点だと考え、それらがクライアントアプリケーションによって修正されるかどうかに関わらず、行のフィールドすべてを対象とするUpdateBatchメソッドを好むでしょう。利用者はBatchUpdatesSetAllValuesプロパティにTrueを設定するだけでより安全に動作させることができます。
ADOConfig.BatchUpdatesSetAllValues = True
Notice that the ADORecordset class also exposes the BatchUpdatesSetAllValues property, therefore you can change the behavior for each individual Recordset.
ADORecordsetクラスはBatchUpdatesSetAllValuesプロパティも持っていますので、個々のレコードセットに対して動作を変更することができます。
EnforceConstraintsOnLoad property/EnforceConstraintsOnLoadプロパティ
When used to create a client-side static cursor, the Open method of the ADORecordset reads rows from the database and loads them into a private, temporary DataSet object whose EnforceConstraints property is set to False, and only later data is moved into a DataTable. This step is necessary to perfectly replicate the ADODB behavior, which never raises an error if an incoming row doesn’t match all required constraints. (For example, ADODB doesn’t raise an error if the incoming row contains a NULL value for a non-nullable column.)
クライアントサイドの静的カーソルが使用される場合、ADORecordsetのOpenメソッドはデータベースから行を読み、EnforceConstraints プロパティがFalseにセットされたprivateでtemporaryなDataSetオブジェクトにそれらを読み込んだ後にのみ、DataTableにデータを移します。このステップはADODBの、取り込まれる行が要求される全制約に該当しない場合、エラーを発生させないという動作を完全に複製するために不可欠です。(例えば、取り込まれる行が非NULL列にNULLを含む場合、ADODBはエラーを発生させません。)
On the other hand, loading data into a temporary DataSet slightly degrades performances. If you are sure that incoming data doesn’t violate any database constraint you can skip this intermediate step by setting the EnforceConstraintsOnLoad property to True:
一方、temporaryのDataSetにデータを読み込むことはわずかにパフォーマンスを低下させます。取り込みデータがデータベースの制約に違反することが確実な場合、EnforceConstraintsOnLoadプロパティをTrue にセットして中間ステップをスキップすることができます。
ADOConfig.EnforceConstraintsOnLoad = True
Notice that the ADORecordset class also exposes the EnforceConstraintsOnLoad property, therefore you can change the behavior for each individual recordset.
ADORecordsetクラスがEnforceConstraintsOnLoadプロパティも持っているため、個々のレコードセットに対する動作を変更できることに注意してください。
IgnoreDataSchema property/IgnoreDataSchemaプロパティ
If this property is set to False (the default value) and you open a Recordset in batch optimistic mode, ADOLibrary queries the data source and retrieves schema information about individual fields. This information is used to correctly implement a few properties of the Field object, namely DefinedSize, NumericScale, Precision and the Properties collection. If you are sure that your code doesn’t rely on this metadata information, you can speed up Recordset.Open methods by setting this property to True.
このプロパティに(初期値)Falseをセットし、一括楽観モードでレコードセットをオープンする場合、ADOLibraryはデータソースに照会し、個々のフィールドに関するスキーマ情報を取り出します。この情報はFieldオブジェクトの2、3のプロパティを正しく実装するために使用されます。すなわち、DefinedSize、NumericScale、PrecisionとPropertiesコレクションです。コードがこのメタデータ情報に依存しないことが確実である場合、このプロパティにTrueをセットしてRecordset.Openメソッドの速度を向上させることができます。
ADOConfig.IgnoreDataSchema = True
Notice that this assignment affects all instances of the ADORecordset class. You can be more granular by leaving this global property set to False and assign True to the IgnoreDataSchema property of individual ADOConnection, ADORecordset, and ADOCommand objects.
この設定がADORecordsetクラスの全インスタンスに影響を及ぼすことに注意してください。利用者はこのグローバルプロパティにFalseをセットしたり、ADOConnection 、ADORecordset 、ADOCommand の各オブジェクトのIgnoreDataSchemaプロパティにTrueをセットすることでより粗くすることができます。
LibraryKind property/LibraryKindプロパティ
By default, ADOLibrary internally uses the OleDb ADO.NET data provider. If you know that the VB.NET application will only access a specific database – for example, Microsoft SQL Server – you can improve performance by assigning a new value to this property:
デフォルトでは、ADOLibraryはOleDb用ADO.NETデータプロバイダを内部的に使用します。VB.NETアプリケーションが特定のデータベースにのみ接続することがわかっている場合、―例えば、Microsoft SQL Server―このプロパティに新しい値を割り当てて性能を向上させることができます。
ADOConfig.LibraryKind = ADOLibraryKind.SqlClient
Valid values for the LibraryKind property are: OleDb, SqlClient, Odbc, OracleClient. However, version 1.0 of ADOLibrary only supports the OleDb and SqlClient values. Any other value throws an exception (if ThrowOnUnsupportedMembers is True) or are ignored.
LibraryKindプロパティにに対して有効な値は、OleDb、SqlClient、Odbc、OracleClientです。 ただし、ADOLibraryのバージョン1.0はOleDbとSqlClientのみサポートします。その他の値は例外を発生させるか(ThrowOnUnsupportedMembersがTrueなら)無視されます。
SynchronizingObject property/SynchronizingObjectプロパティ
The ADOConnection and ADORecordset objects can raise asynchronous events. By default, these events run in thread other than the main thread of the VB.NET application. This detail can cause problems and unexpected crashes if the code in the event handler accesses one or more user interface elements, such as a form or a control. You can avoid this problem by assigning a form or a control reference to the ADOConfig.SynchronizingObject property. Any form or control will do:
ADOConnectionオブジェクトとADORecordsetオブジェクトは非同期イベントを発生させることができます。デフォルトでは、これらのイベントはVB.NETアプリケーションのメインスレッド以外のスレッドで実行されます。イベントハンドラーのコードが、フォームやコントロールのような、一つ以上のインターフェース要素にアクセスする場合、細部において問題が起こったり、予期しないクラッシュが発生する可能性があります。利用者は、ADOConfig.SynchronizingObjectプロパティを参照するフォームやコントロールを割り当てることで、この問題を回避することができます。どのようなフォームやコントロールでも次のように記述することができます。
' if inside a form class, "Me" is a reference to the current form
ADOConfig.SynchronizingObject = Me
Assigning the ADOConfig.SynchronizingObject property affects all the asynchronous events of all the objects instantiated from the ADOLibrary. If only a few event handlers access UI elements you’re better off assigning the SynchronizingObject property of individual ADOConnection and ADORecordset instances.
ADOConfig.SynchronizingObjectプロパティはADOLibraryからインスタンス化したオブジェクトの非同期イベントすべてに影響を与えます。ほんの2,3個のイベントハンドラーがUI要素にアクセスする場合は、ADOConnectionとADORecordsetの各インスタンスのSynchronizingObjectプロパティを設定した方がいいでしょう。
ThrowOnUnsupportedMembers property/ThrowOnUnsupportedMembersプロパティ
The default behavior of the ADOLibrary is to ignore assignments to properties that aren’t supported – for example the Index property of the ADORecordset class – as well as calls to unsupported methods. This behavior is OK during the early stages of the migration, but can be problematic when running more rigorous tests. By setting the ThrowOnUnsupportedMembers property to True you cause any invocation of unsupported members to cause a runtime exception:
ADOLibraryのデフォルト動作は、サポートされないメソッドに対する呼び出しのように、サポートされないプロパティ設定―例えば、ADORecordsetクラスのIndexプロパティ―を無視します。この動作は移行の初期段階では問題ありませんが、より厳密なテストを行っているときは問題になる可能性があります。ThrowOnUnsupportedMembersプロパティをTrueに設定することで、ランタイムエラーを発生させるサポートされないメンバーを呼び出しを発生させます。
ADOConfig.ThrowOnUnsupportedMembers = True
Note for VB Migration Partner users: this property is similar to and has the same effect of the VBConfig.ThrowOnUnsupportedMembers property.
VB Migration Partner の利用者にとって、このプロパティはVBConfig.ThrowOnUnsupportedMembersプロパティと似ており、同じ効果を持つものであることを覚えてください。
The ADOConnection class/ADOConnectionクラス
The ADOConnection class is similar and behaves like the ADODB.Connection class, except for the following details.
ADOConnectionクラスは、以下の特徴以外についてはADODB.Connectionクラスに似ており、同じように動作します。
Close method/Closeメソッド
Under ADODB, a Connection object is automatically closed when the last reference to it is set to Nothing or just go out of scope. Because of how .NET manages memory, ADOLibrary objects aren’t automatically closed when they go out of scope. Instead, it is essential that you explicitly close an ADOConnection object just before setting it to Nothing or letting it go out of scope.
ADODBでは、オブジェクトに対する最後の参照にNothingがセットされるかスコープの外になったとき、Connectionオブジェクトは自動的に閉じられます。.NETではメモリー管理方法が原因で、スコープの外になったとき、ADOLibraryオブジェクトは自動的に閉じられません。その代わり、Nothingかスコープの外になる直前にADOConnectionオブジェクトを明示的に閉じることが必須となっています。
Failing to do so may cause problems in the migrated .NET application, because the connection is closed only sometime later. For example, if the connection was opened in exclusive mode, no other application will be able to re-open it, until the .NET Framework starts a garbage collection some seconds or even minutes later.
コネクションが時々遅く閉じられるため、そうすることに失敗することで、変換された.NETアプリケーションに問題が起こる可能性があります。例えば、コネクションが排他モードで開かれていた場合、.NET Frameworkが数秒か数分後にガベージコレクションを始めるまでは、他のアプリケーションはそれを再オープンすることができなくなります。
Also, according to .NET programming guidelines, you should never invoke the Close method of an ADOConnection object from inside the Finalize method of a .NET class, or (equivalently) from the Class_Terminate event of the VB6 application being migrated. This practice is to be avoided because the inner ADO.NET object might have been already finalized or disposed of when the .NET Finalize method is invoked.
また、.NETプログラミングガイドラインによると、.NET クラスのFinalizeメソッドの内部、または、変換されるVB6アプリケーションのClass_TerminateイベントからADOConnection オブジェクトのCloseメソッドを絶対に呼び出すべきではありません。.NET のFinalize メソッドが呼び出されたとき、ADO.NETオブジェクトが内部的にすでにファイナライズされているかディスポーズされているかもしれないため、このやり方は避けるべきです。
Connection property (.NET only)/Connectionプロパティ(.NETのみ)
This readonly property returns the DbConnection object that is used for the current ADOConnection instance. This property allows you to mix ADODB-like statements and ADO.NET statements.
このreadonlyプロパティは現在のADOConnectionインスタンスに対して使用されるDbConnectionオブジェクトを返します。このプロパティによってADODBのようなステートメントとADO.NETステートメントを混在させることができます。
Sub ExecuteUnderTransaction(ByVal cn As ADOConnection)
Dim trans As DbTransaction = cn.Connection.BeginTransaction()
' ... more statements here
ここにはもっと多くのステートメントがあります
trans.Commit()
End Sub
The ADOConnection class also exposes other readonly properties named OleDbConnection, SqlConnection, and OdbcConnection, which return a more specific connection object, or Nothing if the ADO.NET data provider used internally doesn’t match the property type.
ADOConnectionクラスは他にOleDbConnectionやSqlConnectionやOdbcConnectionという読み取り専用プロパティも持っています。それらは特定のコネクションオブジェクトを返すか、使用されているADO.NET データプロバイダがプロパティタイプと内部的に一致しない場合はNothingを返します。
DefaultDatabase property/DefaultDatabaseプロパティ
Unlike the ADODB property, this property doesn’t reflect changes in the default database that were enforced by means of a direct USE dbname SQL statement.
ADODBプロパティとは異なるこのプロパティは、直接的なUSE dbnameを使用するSQL文によって強制されたデフォルトデータベースの変更を反映しません。
Execute method/Executeメソッド
This method works as in ADODB, except it throws an exception if multiple, semicolon-delimited SQL statements are passed as an argument.
このメソッドは、複数のセミコロンで区切られたSQL文が引数として渡された場合に例外を発生させる以外は、ADODBと同様に動作します。
IgnoreDataSchema property (.NET only)/IgnoreDataSchemaプロパティ(.NETのみ)
If this property is set to False (the default value) and you open a Recordset in batch optimistic mode, ADOLibrary queries the data source and retrieves schema information about individual fields. This information is used to correctly implement a few members of the Field object, namely DefinedSize, NumericScale, Precision, and Properties. If you are sure that your code doesn’t rely on this metadata information, you can speed up Recordset.Open methods by setting this property to True.
このプロパティに(初期値)Falseをセットし、一括楽観モードでレコードセットをオープンする場合、ADOLibraryはデータソースに照会し、個々のフィールドに関するスキーマ情報を取り出します。この情報はFieldオブジェクトの2、3のメンバーを正しく実装するために使用されます。すなわち、DefinedSize、NumericScale、PrecisionとPropertiesです。コードがこのメタデータ情報に依存しないことが確実である場合、このプロパティにTrueをセットしてRecordset.Openメソッドの速度を向上させることができます。
Sub ReadWithNoSchema(ByVal cn As ADOConnection, ByVal rs As ADORecordset)
cn.IgnoreDataSchema = True
rs.Open "Select * From Orders", cn
' …
End Sub
The default value of this property when the ADOConnection object is instantiated is equal to ADOConfig.IgnoreDataSchema.
ADOConnectionオブジェクトがインスタンス化されたとき、このプロパティの初期値はADOConfig.IgnoreDataSchemaに等しい。
LibraryKind property (.NET only)/LibraryKindプロパティ(.NETのみ)
By default, ADOLibrary internally uses the OleDb ADO.NET data provider. If you know that a given ADOConnection object will only access a specific database – for example, Microsoft SQL Server – you can improve performance by assigning a new value to this property:
デフォルトでは、ADOLibraryはOleDb用ADO.NETデータプロバイダを内部的に使用します。ADOConnectionオブジェクトが特定のデータベースにのみ接続することがわかっている場合、―例えば、Microsoft SQL Server―このプロパティに新しい値を割り当てて性能を向上させることができます
Dim cn As New ADOConnection cn.LibraryKind = ADOLibraryKind.SqlClient
Valid values for the LibraryKind property are: OleDb, SqlClient, Odbc, OracleClient. However, version 1.0 of ADOLibrary only supports the OleDb and SqlClient values. Any other value throws an exception (if ThrowOnUnsupportedMembers is True) or are ignored. If this property is left unassigned, it is set equal to the value of ADOConfig.LibraryKind property.
LibraryKindプロパティにに対して有効な値は、OleDb、SqlClient、Odbc、OracleClientです。 ただし、ADOLibraryのバージョン1.0はOleDbとSqlClientのみサポートします。その他の値は例外を発生させるか(ThrowOnUnsupportedMembersがTrueなら)無視されます。このプロパティが設定されない場合、ADOConfig.LibraryKindプロパティの値に等しくなります。
Open method/Openメソッド
This method works exactly as in ADODB, except that it issues the following SQL command immediately after opening a SQL Server connection:
このメソッドは、SQL Server接続が開始された直後に以下のSQLコマンドが発行される場合を除いて、ADODBと同様に動作します。
SET LANGUAGE 'English'
This step is necessary because ADOLibrary must interpret error messages coming from the database, in order to raise the corresponding ADODB error message.
対応するADODB エラーメッセージを呼び出すために、ADOLibraryがデータベースから来るエラーメッセージを解析しなければならないため、このステップは必須です。
OpenSchema method/OpenSchemaメソッド
This method accepts only a subset of the enumerated values you can pass to the corresponding ADODB method, namely: adSchemaCatalogs, adSchemaTables, adSchemaColumns, adSchemaProcedures, adSchemaProcedureParameters, adSchemaIndexes. However, an overload that takes the ADO.NET collection name is also provided:
このメソッドは、対応するADODBメソッドに渡すことができる数値付きの値のサブセットのみ受け取ることができます。すなわち、adSchemaCatalogs、adSchemaTables、adSchemaColumns、adSchemaProcedures、adSchemaProcedureParameters、adSchemaIndexesです。ただし、ADO.NETコレクション名を取るオーバーロードも受け取ることができます。
Sub Test(ByVal cn As ADOConnection) ' the following two statements are equivalent Dim rs As ADORecordset rs = cn.OpenSchema(ADOSchemaEnum.adSchemaCatalogs) ' the following statement uses the ADO.NET syntax rs = cn.OpenSchema("Catalogs") End Sub
SynchronizingObject property (.NET)/SynchronizingObjectプロパティ(.NET)
The ADOConnection object can raise asynchronous events. By default, these events run in thread other than the main thread of the VB.NET application. This detail can cause problems and unexpected crashes if the code in the event handler accesses one or more user interface elements, such as a form or a control. You can avoid this problem by assigning a form or a control reference to the SynchronizingObject property. Any form or control will do:
ADOConnectionオブジェクトは非同期イベントを発生させることができます。デフォルトでは、これらのイベントはVB.NETアプリケーションのメインスレッド以外のスレッドで実行されます。イベントハンドラーのコードが、フォームやコントロールのような、一つ以上のユーザーインターフェース要素にアクセスする場合、細部において問題が起こったり、予期しないクラッシュが発生する可能性があります。利用者は、SynchronizingObjectプロパティを参照するフォームやコントロールを割り当てることで、この問題を回避することができます。どのようなフォームやコントロールでも次のように記述することができます。
' if inside a form class, "Me" is a reference to the current form
Dim cn As New ADOConnection
cn.SynchronizingObject = Me
Version property/Versionプロパティ
This property always returns the value “2.8”.
このプロパティは常に2.8を返します。
The ADORecordset class/ADORecordsetクラス
The ADORecordset class is similar and behaves like the ADODB.Recordset class, except for the following details.
ADORecordsetクラスは、以下にあげる機能以外はADODB.Recordsetクラスと似ており、ADODB.Recordsetクラスのように動作する。
BatchUpdatesSetAllValues property (.NET only)/BatchUpdatesSetAllValuesプロパティ(.NETのみ)
If this property is set to False (the default value) then UPDATE statements generated by UpdateBatch methods assign only the columns that have been modified. For example, if you have read Name, Company, and City fields from a given table and you later modify only the Name and Company fields, the UPDATE statement generated for that row when you issue the UpdateBatch method will assign only these two fields and won’t modify the value of the City field currently stored in the database.
このプロパティにFlaseをセットするとUpdateBatchメソッドによって生成されたUPDATE文は修正された列だけを対象とします。例えば、テーブルからName、Company、Cityフィールドを読み込んだ後で、NameとCompanyフィールドだけを修正した場合、UpdateBatchメソッドを使用しているときにその行に対して生成されるUPDATE文はこれらの二つのフィールドのみを対象とし、現在データベースに保存されているCityフィールドの値は修正しません。
Even if the abovementioned behavior perfectly mimics what ADODB does, many developers consider it a design flaw of ADODB and would prefer the UpdateBatch method to assign all the fields in the row, regardless of whether they were modified by the client application. You can achieve this safer behavior by simply assigning True to the BatchUpdatesSetAllValues property:
たとえ上述の動作がADODBの動作を完全に複製したとしても、ほとんどの開発者はそれをADODBのデザイン上の欠点だと考え、それらがクライアントアプリケーションによって修正されるかどうかに関わらず、行のフィールドすべてを対象とするUpdateBatchメソッドを好むでしょう。利用者はBatchUpdatesSetAllValuesプロパティにTrueを設定するだけでより安全に動作させることができます。
Dim rs As New ADORecordset rs.BatchUpdatesSetAllValues = True
When an ADORecordset is created, this property is set equal to ADOConfig.BatchUpdatesSetAllValues property.
ADORecordsetが作成されると、このプロパティはADOConfig.BatchUpdatesSetAllValuesプロパティと等しくなります。
BindingManager property (.NET)/BindingManagerプロパティ(.NET)
When manually binding an ADORecordset object to a .NET control – such as a DataGridView control – you should also assign this property, as shown in following example:
.NETコントロールに対して―DataGridViewコントロールのような―ADORecordsetオブジェクトを手作業でバインドする場合、以下の例のように、このプロパティも割り当てるべきです。
DataGridView1.DataSource = rs.DataTable rs.BindingManager = Me.BindingManager
Bookmark property/Bookmarkプロパティ
This property works as in ADODB, except that you cannot assign it to move to a record that has been deleted. Under ADODB this operation is legal, whereas it throws an exception with the ADOLibrary.
このプロパティは、削除されたレコードを移動させるために割り当てることができなということ以外は、ADODBと同じように動作します。ADODBにおいてこの操作は有効ですが、ADOLibraryでは例外が発生します。
CacheSize property/CacheSizeプロパティ
This property preserves any value you assign to it, but is otherwise ignored because ADOLibrary doesn’t maintain a row cache.
このプロパティは割り当てた値を保持しますが、さもなければADOLibraryは行キャッシュを維持しないため無視されます。
Close method/Closeメソッド
Under ADODB, a Recordset object is automatically closed when the last reference to it is set to Nothing or just go out of scope. Because of how .NET manages memory, ADOLibrary objects aren’t automatically closed when they go out of scope. Instead, it is essential that you explicitly close an ADORecordset object just before setting it to Nothing or letting it go out of scope.
ADODBでは、オブジェクトに対する最後の参照にNothingがセットされるかスコープの外になったとき、Recordsetオブジェクトは自動的に閉じられます。.NETではメモリー管理方法が原因で、スコープの外になったとき、ADOLibraryオブジェクトは自動的に閉じられません。その代わり、Nothingかスコープの外になる直前にADORecordsetオブジェクトを明示的に閉じることが必須となっています。
Failing to do so may cause problems in the migrated .NET application, because the connection is closed only sometime later. For example, if the recordset had opened a SQL Server server-side cursor, the current application cannot open another server-side cursor until the .NET Framwork starts a garbage collection (unless you are using the MARS feature that comes with Microsoft SQL Server 2005 and later versions).
例えば、レコードセットがSQL Serverのサーバーサイドカーソルをオープンした場合、現在のアプリケーションは、(Microsoft SQL Server 2005 以降で提供されるMARS(Multiple Active Result Set)という機能を使用しない限り).NET Framworkがガベージコレクションを開始するまでは他のサーバーサイドカーソルをオープンすることができません。
Also, according to .NET programming guidelines, you should never invoke the Close method of an ADORecordset object from inside the Finalize method of a .NET class, or (equivalently) from the Class_Terminate event of the VB6 application being migrated. This practice is to be avoided because the inner ADO.NET object might have been already finalized or disposed of when the .NET Finalize method is invoked.
また、.NETプログラミングガイドラインによると、.NET クラスのFinalizeメソッドの内部、または、変換されるVB6アプリケーションのClass_TerminateイベントからADORecordsetオブジェクトのCloseメソッドを絶対に呼び出すべきではありません。.NET のFinalize メソッドが呼び出されたとき、ADO.NETオブジェクトが内部的にすでにファイナライズされているかディスポーズされているかもしれないため、このやり方は避けるべきです。
CommandBehavior property (.NET only) /CommandBehaviorプロパティ(.NETのみ)
The value of this property is used internally and is assigned to the CommandBehavior property of the inner ADO.NET Command object used to open the ADORecordset. For example, if you know that the rowset being read contains only a single row, you can slightly optimize execution as follows
このプロパティの値は内部的に使用され、ADORecordset をオープンするために使用されるADO.NET内部のCommand オブジェクトのCommandBehaviorプロパティに対して割り当てられます。例えば、読み込まれる行セットが1行だけであることが分かっていれば、次のように若干楽観的な実行が可能となります。
Sub TestSingleRow(ByVal rs As ADORecordset, ByVal cn As ADOConnection) rs.CommandBehavior = CommandBehavior.SingleRow ' notice that following statement can return max row at the maximum 次のステートメントが最大での最大行を返すことができることに注意してください rs.Open("SELECT * FROM Orders WHERE OrderID=1", cn) ' … End Sub
This property is ignored if assigned to an opened ADORecordset.
このプロパティは、オープンされたADORecordsetに対して割り当てられる場合、無視されます。
Copy method (.NET)/Copyメソッド(.NET)
This method returns a distinct copy of the current ADORecordset and is equivalent to saving and reloading an ADORecordset object to/from a file. The Copy method takes two parameters, a MarshalOptionEnum value and an optional filter string:
このメソッドは現在のADORecordsetのコピーを返し、ファイルへのADORecordsetの保存またはファイルからのADORecordset読み出しと同等です。このCopyメソッドは、MarshalOptionEnum値と任意のフィルター文字列という二つのパラメータを受け取ります。
Sub TestCopy(ByVal rs As ADORecordset)
Dim copyRs As ADORecordset
Dim filter As String = "City = 'Boston'"
copyRs = rs.Copy(ADOMarshalOptionEnum.adMarshalModifiedOnly, filter)
'…
End Sub
If the second parameter is omitted, then the current value of the Filter property is used. The Copy method is only valid for client-side ADORecordset objects.
第二引数が省略される場合、現在のFilterプロパティの値が使用されます。CopyメソッドはクライアントサイドのADORecordsetオブジェクトに対してのみ有効です。
CursorHandle property (.NET only)/CursorHandleプロパティ(.NETのみ)
This readonly property returns the handle of the server-side cursor used internally when the ADORecordset is used to open a server-side SQL Server cursor. In advanced scenarios you can use this cursor handle to send direct commands to SQL Server.
この読み取り専用プロパティは、ADORecordsetがサーバーサイドのSQL Serverカーソルをオープンするために使用される場合に、内部的に使用されるサーバーサイドカーソルのハンドルを返します。高度なやり方としてSQL Serverに直接コマンドを送るために、このカーソルハンドルを使用することができます。
CursorType property/CursorTypeプロパティ
This property works as in ADODB, except that only the adOpenStatic (when CursorLocation = adUseClient) and adForwardOnly values are guaranteed to work in all cases. All other values refer to server-side cursors and are valid only when accessing a SQL Server database. If a CursorType value isn’t supported, the Open method throws an exception.
adOpenStatic値(CursorLocation = adUseClientの場合)とadForwardOnly値がすべての場合において動作することが保証されている以外は、このプロパティはADODBと同じように動作します。他のすべての値はサーバーサイドカーソルを参照しており、SQL Serverに接続するときのみ有効となります。CursorType値がサポートされない場合、Openメソッドは例外を発生させます。
Please notice that under ADODB, it is possible to specify CursorType=Keyset (or Dynamic) and LockType=BatchOptmisitic. In this case, all updates are cached until a UpdateBatch command is issued. Conversely, the ADOLibrary updates each individual record immediately. To alert the user that the behavior is different, an exception is intentionally thrown when the UpdateBatch command is issued.
ADODBでは、CursorType=Keyset(またはDynamic)とLockType=BatchOptmisiticを特定することができることに注意してください。この場合、すべての変更は、UpdateBatchコマンドが発行されるまで、キャッシュされます。反対に、ADOLibraryは各レコードを即座に更新します。動作が異なることを利用者に気付かせるため、UpdateBatchコマンドが発行されたとき、例外が故意に発生します。
Current version of ADOLibrary doesn’t fully support server-side dynamic cursors.
ADOLibraryの現在のバージョンはサーバーサイドダイナミックカーソルを完全にはサポートしていません。
CurrentCursorRow property (.NET only)/CurrentCursorRowプロパティ(.NETのみ)
This readonly property returns the DataRow object that contains the current row. It is used only when the ADORecordset object is used to access a SQL Server server-side cursor.
この読み取り専用プロパティは現在の行を含むDataRowオブジェクトを返します。これは、ADORecordsetオブジェクトがSQL Serverのサーバーサイドカーソルに接続するために使用されるときにのみ使用されます。
DataAdapter property (.NET only)/DataAdapterプロパティ(.NETのみ)
This readonly property returns the DbDataAdapter object that is used internally when the ADORecordset object is used to open a client-side cursor. It can be used to access ADO.NET specific members that have no corresponding member under ADODB.
この読み取り専用プロパティは、ADORecordset オブジェクトがクライアントサイドカーソルをオープンするために使用されるときに内部的に使用されるDbDataAdapterオブジェクトを返します。それはADODB に対応するメンバーがないADO.NETの特定のメンバーにアクセスするために使用することができます。
The ADORecordset class exposes additional readonly properties, named OleDbDataAdapter, SqlDataAdapter, and OdbcDataAdapter – which return a strongly-typed DataAdapter object, or Nothing if the ADO.NET data provider used internal doesn’t match the property type.
ADORecordsetクラスには、OleDbDataAdapter、SqlDataAdapter、OdbcDataAdapterという読み取り専用のプロパティが追加されています―これらのプロパティは強く型付けされたDataAdapterオブジェクトを返しますが、内部的に使用されるADO.NETデータプロバイダがプロパティ型と一致しない場合はNothingを返します。
DataReader property (.NET only)/DataReaderプロパティ(.NETのみ)
This readonly property returns the DbDataReader object that is used internally when the ADORecordset object is used to open a forwardonly-readonly (FO-RO) cursor. It can be used to access ADO.NET specific members that have no corresponding member under ADODB, for example using the GetBoolean, GetInteger, etc. methods to read column values in a more efficient way.
この読み取り専用プロパティは、ADORecordset オブジェクトがforwardonly-readonlyカーソルをオープンするために使用されるときに内部的に使用されるDbDataReaderオブジェクトを返します。それは、ADODBに対応するメンバーがないADO.NETの特定のメンバー―例えば、より効率的な方法でカラムの値を読み込む、GetBooleanやGetIntegerなどを使用するメソッド―にアクセスするために使用することができます。
The ADORecordset class exposes additional readonly properties, named OleDbDataReader, SqlDataReader, and OdbcDataReader – that return a strongly-typed DataReader object, or Nothing if the ADO.NET data provider used internal doesn’t match the property type.
ADORecordsetクラスには、OleDbDataReader、SqlDataReader、OdbcDataReaderといった読み取り専用プロパティが追加されています―これらのプロパティは強く型付けされたDataReaderオブジェクトを返しますが、内部的に使用されるADO.NETデータプロバイダがプロパティ型と一致しない場合はNothingを返します。
DataSource property/DataSourceプロパティ
This property is currently not implemented.
このプロパティは現在実装されていません。
DataTable property (.NET only)/DataTableプロパティ(.NETのみ)
This readonly property returns the DataTable that contains the rows that have been read from the database when the ADORecordset is used to open a client-side cursor. You can use this property to bind data to a .NET control, such as a DataGridView control.
この読み取り専用プロパティは、ADORecordsetがクライアントサイドカーソルをオープンするために使用されたときにデータベースから読み込まれた行を含むDataTableを返します。ユーザーはこのプロパティを、DataGridViewコントロールのような.NETコントロースにデータをバインドするために使用することができます。
The inner DataTable also used when working with SQL Server server-side cursors, in which case the DataTable contains only the current database row.
この内部的なDataTableはSQL Serverのサーバーサイドカーソルを動作させるときにも使用されます。その場合、DataTableは現在のデータベースの行のみを含みます。
DataView property (.NET only)/DataViewプロパティ(.NETのみ)
This readonly property returns the DataView that is associated to the inner DataTable and that honors the current Filter and Sort settings. This property is non-Nothing only when the ADORecordset is used to open a client-side cursor. You can use this property to bind data to a .NET control, such as a DataGridView control.
このプロパティは、内部のDataTableと結合しているDataViewを返すだけでなく、FilterやSortの設定も引き継ぎます。このプロパティはクライアントサイドカーソルをオープンするためにADORecordsetが使用されるときはNothingになりません。ユーザーは、DataGridViewコントロールのような.NETコントロールにデータをバインドするためにこのプロパティを使用することができます。
EnforceConstraintsOnLoad property (.NET only)/EnforceConstraintsOnLoadプロパティ(.NETのみ)
When used to create a client-side static cursor, the Open method of the ADORecordset reads rows from the database and loads them into an private, temporary DataSet object whose EnforceConstraints property is set to False, and only later data is moved into a DataTable. This step is necessary to perfectly replicate the ADODB behavior, which never raises an error if an incoming row doesn’t match all required constraints. (For example, ADODB doesn’t raise an error if the incoming row contains a NULL value for a non-nullable column.)
クライアントサイドの静的カーソルが使用される場合、ADORecordsetのOpenメソッドはデータベースから行を読み、EnforceConstraints プロパティがFalseにセットされたprivateでtemporaryなDataSetオブジェクトにそれらを読み込んだ後にのみ、DataTableにデータを移します。このステップはADODBの、取り込まれる行が要求される全制約に該当しない場合、エラーを発生させないという動作を完全に複製するために不可欠です。(例えば、取り込まれる行が非NULL列にNULLを含む場合、ADODBはエラーを発生させません。)
On the other hand, loading data into a temporary DataSet slightly degrades performances. If you are sure that incoming data doesn’t violate any database constraint you can skip this intermediate step by setting the EnforceConstraintsOnLoad property to True:
一方、temporaryのDataSetにデータを読み込むことはわずかにパフォーマンスを低下させます。取り込みデータがデータベースの制約に違反することが確実な場合、EnforceConstraintsOnLoadプロパティをTrue にセットして中間ステップをスキップすることができます。
Dim rs As New ADORecordset rs.EnforceConstraintsOnLoad = True
When an ADORecordset is created, this property is set equal to ADOConfig.EnforceConstraintsOnLoad property.
ADORecordsetが作成されるとき、このプロパティはADOConfig.EnforceConstraintsOnLoadプロパティと等しくなります。
FetchProgress event/FetchProgressイベント
This event is never raised and is marked as obsolete, because ADOLibrary doesn’t support asynchronous fetching. (It does support asynchronous connection and execution, though.)
このイベントはADOLibraryが非同期フェッチをサポート」しないため発生せず、すでに使用されていないイベントと見なされます。(ただし、非同期接続と非同期実行はサポートされます)
Filter property/Filterプロパティ
Under ADODB this property can be assigned a string containing a WHERE clause, a FilterGroupEnum enumerated value, or an array of bookmarks. The ADOLibrary accepts the first two types, but supports neither bookmark arrays nor the (undocumented) value 4-adFilterPredicate. Moreover, the value 3-adFilterFetchedRecords is ignored, because ADOLibrary doesn’t maintain a row cache. Finally, when setting the value 2-adFilterAffectedRecord after invoking the UpdateBatch method, bear in mind that deleted records that were successfully committed to the database won’t be included in the filtered Recordset.
ADODBではこのプロパティにWHERE節やFilterGroupEnum列挙型やブックマークの配列を含む文字列を割り当てることができます。ADOLibraryはその二つの型を受け取りますが、ブックマーク配列と非公式な4-adFilterPredicate値はどちらもサポートしません。さらに、ADOLibrary が行キャッシュを保持しないため、3-adFilterFetchedRecords値は無視されます。最後に、UpdateBatchメソッドを読みだした後で2-adFilterAffectedRecord値を設定すると、データベースに対して正常にコミットされた削除済みレコードはフィルタリングされたレコードセットには含まれなくなることに注意してください。
Find method/Findメソッド
This method isn’t currently implemented for server-side cursors.
このメソッドはサーバーサイドカーソル用には現在提供されていません。
IgnoreDataSchema property (.NET only)/IgnoreDataSchemaプロパティ(.NETのみ)
If this property is set to False (the default value) and you open a Recordset in batch optimistic mode, ADOLibrary queries the data source and retrieves schema information about individual fields. This information is used to correctly implement a few members of the Field object, namely DefinedSize, NumericScale, Precision, and Properties. If you are sure that your code doesn’t rely on this metadata information, you can speed up Recordset.Open methods by setting this property to True.
このプロパティに(初期値)Falseをセットし、一括楽観モードでレコードセットをオープンする場合、ADOLibraryはデータソースに照会し、個々のフィールドに関するスキーマ情報を取り出します。この情報はFieldオブジェクトの2、3のメンバーを正しく実装するために使用されます。すなわち、DefinedSize、NumericScale、PrecisionとPropertiesです。コードがこのメタデータ情報に依存しないことが確実である場合、このプロパティにTrueをセットしてRecordset.Openメソッドの速度を向上させることができます。
Sub ReadWithNoSchema(ByVal cn As ADOConnection, ByVal rs As ADORecordset)
rs.IgnoreDataSchema = True
rs.Open "Select * From Orders", cn
' …
End Sub
When an ADORecordset is created, this property is set equal to ADOConfig.IgnoreDataSchema property.
ADORecordsetが作成されるとき、このプロパティはADOConfig.IgnoreDataSchemaプロパティと等しくなります。
Index property/Indexプロパティ
The Index property is unsupported. It always returns an empty string; assigning a different value throws an exception (if ADOConfig.ThrowOnUnsupportedMembers is True).
このIndexプロパティはサポートされません。それは常に空文字を返します。また、(ADOConfig.ThrowOnUnsupportedMembersがTrueの場合)異なる値を割り当てると例外が発生します。
LibraryKind property (.NET only)/LibraryKindプロパティ(.NETのみ)
By default, ADOLibrary internally uses the OleDb ADO.NET data provider. If you know that the ADORecordset object will only access a specific database – for example, Microsoft SQL Server – you can improve performance by assigning a new value to this property:
デフォルトでは、ADOLibraryはOleDb用ADO.NETデータプロバイダを内部的に使用します。そのADORecordsetオブジェクトが特定のデータベースにのみ接続することがわかっている場合、―例えば、Microsoft SQL Server―このプロパティに新しい値を割り当てて性能を向上させることができます。
Dim rs As New ADORecordset rs.LibraryKind = ADOLibraryKind.SqlClient
Valid values for the LibraryKind property are: OleDb, SqlClient, Odbc, OracleClient. However, version 1.0 of ADOLibrary only supports the OleDb and SqlClient values. Any other value throws an exception (if ThrowOnUnsupportedMembers is True) or are ignored. If this property is left unassigned, it is set equal to the value of ADOConfig.LibraryKind property or equal to the LibraryKind property of the ADOConnection object used to open the recordset.
LibraryKindプロパティにに対して有効な値は、OleDb、SqlClient、Odbc、OracleClientです。 ただし、ADOLibraryのバージョン1.0はOleDbとSqlClientのみサポートします。その他の値は例外を発生させるか(ThrowOnUnsupportedMembersがTrueなら)無視されます。このプロパティが設定されない場合、ADOConfig.LibraryKindプロパティの値に等しくなるか、レコードセットをオープンするために使用されるADOConnectionオブジェクトのLibraryKindプロパティと等しくなります。
LockType property/LockTypeプロパティ
This property works as in ADODB, except that only the adLockReadOnly and adLockBatchOptimistic values are guaranteed to work in all cases. All other values refer to server-side cursors and are valid only when accessing a SQL Server database. If a LockType value isn’t supported, the Open method throws an exception.
このプロパティは、adLockReadOnly値とadLockBatchOptimistic値がすべての場合において動作することが保証されていることを除いて、ADODBのように動作します。他のすべての値はサーバーサイドカーソルを参照し、SQL Serverに接続するときのみ有効です。LockType値がサポートされない場合、Openメソッドは例外を発生させます。
MarshalOptions property/MarshalOptionsプロパティ
The MarshalOptions property is unsupported. It always returns 0-adMarshalAll; assigning a different value throws an exception (if ADOConfig.ThrowOnUnsupportedMembers is True).
MarshalOptionsプロパティはサポートされていません。それは常に0-adMarshalAllを返します。(ADOConfig.ThrowOnUnsupportedMembersがTrueの場合は)異なる値を割り当てると例外が発生します。
MaxRecords property/MaxRecordsプロパティ
This property works as in ADODB, except it is implemented internally by adding a TOP clause to the SELECT statement sent to the database. If you assign a nonzero value to MaxRecords and the SQL dialect doesn’t support the TOP clause, the Open method throws an exception.
このプロパティは、データベースに送信されるSELECTステートメントにTOP節を追加することで内部的に実装されていることを除いて、ADODBと同じように動作します。MaxRecordsに0ではない値を割り当てた場合、そのSQLはTOP節をサポートせず、Openメソッドは例外を発生させます。
Move method/Moveプロパティ
This method doesn’t work and raises an exception when used with server-side dynamic cursors.
サーバーサイド動的カーソルが使用されるとき、このメソッドは動作せず、例外を発生させます。
Open method/Openメソッド
This method fails with server-side keyset and dynamic cursors if the SELECT statement doesn’t include at least one non-nullable key column.
SELECT文が少なくとも一つの非NULLキー列を含まない場合、このメソッドはサーバーサイドのキーセットと動的カーソルには使用できません。
RecordCount property/RecordCountプロパティ
In current ADOLibrary version, this property returns an inconsistent value when used with server-side cursors and the Filter property is being used to filter rows.
現在のADOLibraryのバージョンでは、サーバーサイドカーソルが使用される場合、このプロパティは矛盾した値を返しますが、Filterプロパティはフィルター行に使用されます。
Resync method/Resyncメソッド
This method works as in ADODB and correctly honors the Resync Command dynamic property. However, if a custom resync command is specified in the Resync Command property, then the command must include a single “?” (question mark) placeholder and when the SELECT statement contains a single key column.
このメソッドはADODBと同じように動作し、動的なResync Commandも正しく引き継いでいます。しかし、Resync Commandプロパティでカスタムresyncコマンドが指定された場合、また、SELECT文がひとつのキー列を含んでいるとき、そのコマンドは「?」プレースホルダーを含めなければなりません。
RowIndex property (.NET only)/RowIndexプロパティ(.NETのみ)
This property sets or returns the zero-based row index of the current row into the inner DataTable, and is significant only when the ADORecordset is used to open a client-side cursor. Assigning this property is roughly equivalent to a Move(n) method.
このプロパティはDataTable 内部に0から始まる現在の行の行インデックスをセットまたは返しますが、ADORecordsetがクライアントサイドカーソルをオープンするために使用されるときに重要な意味を持ちます。このプロパティを割り当てることはMove(n)メソッドと大体の意味において等価です。
Save method/Saveメソッド
This method works as in ADODB, except for two details. First, it only works with client-side recordsets (CursorLocatoin=adUseClient). Second, the storage format – both in binary and XML mode – is different from ADODB and therefore you can’t use this method to persist recordsets and share them between VB6 and .NET applications. Moreover, only the binary format (adPersistADTG) is supported when saving to a Stream object.
このメソッドは二つの特徴を除いて、ADODBと同じように動作します。第1に、(CursorLocatoin=adUseClientである)クライアントサイトレコードセットに対してのみ動作します。第2に、ストレージフォーマット―バイナリとXMLの両方―がADODBとは異なっているため、レコードセットを使い続けるためにこのメソッドを使用することはできませんし、VB6アプリケーションと.NETアプリケーションの間でそれらを共有することもできません。さらに、Streamオブジェクトに保存する場合、バイナリフォーマット(adPersistADTG)のみサポートされます。
Seek method/Seekメソッド
The Seek method is unsupported. Invoking it throws an exception (if ADOConfig.ThrowOnUnsupportedMembers is True).
Seekメソッドはサポートされません。(ADOConfig.ThrowOnUnsupportedMembersがTrueの場合は)それを呼び出そうとすると例外が発生します。
State property/Stateプロパティ
This property works as in ADODB, except it can never return the value 8-adStateFetching, because ADOLibrary doesn’t support asynchronous fetching. (It can return the values 2-adStateConnecting and 4-adStateExecuting because ADOLibrary supports asynchronous connections and asynchronous commands.)
ADOLibraryが非同期フェッチをサポートしないため、8-adStateFetching値を返すことができないことを除いて、このプロパティはADODBと同じように動作します。(ADOLibraryが非同期接続と非同期コマンドをサポートするので、2-adStateConnecting値と4-adStateExecuting値を返すことはできます。)
Status property/Statusプロパティ
The implementation of this property is incomplete in current version of ADOLibrary, in that it can return only one of the following enumerated values: adRecOK, adRecUnmodified, adRecDBDeleted, adRecNew, adRecDeleted, adRecModified, adRecConcurrencyViolaton.
このプロパティの実装はADOLibraryの現在のバージョンにおいては不完全です。そのため、次の列挙型の値のうちのひとつを返すことのみ可能です。すなわち、adRecOK、adRecUnmodified、adRecDBDeleted、adRecNew、adRecDeleted、adRecModified、adRecConcurrencyViolatonです。
StayInSync property/StayInSyncプロパティ
The StayInSync property is unsupported. In always returns True; assigning a different value throws an exception (if ADOConfig.ThrowOnUnsupportedMembers is True).
StayInSyncプロパティはサポートされません。常にTrueが返されます。また、(ADOConfig.ThrowOnUnsupportedMembersがTrueの場合は)異なる値を割り当てると例外が発生します。
Supports method/Supportsメソッド
For highest compatibility, this method returns the same value that would be returned under ADODB. However, because some advanced features aren’t currently supported by ADOLibrary, a feature that is returned as “supported” and yet the VB.NET code can later throw an exception when the corresponding property or method is actually invoked.
最も高い互換性に対して、このメソッドは、ADODBにおいて返す値と同じ値を返します。しかしながら、いくつかの高度な機能はADOLibraryによって現在サポートされていません。「supported」が返される機能でありながら、対応するプロパティやメソッドが実際に呼び出されるとVB.NETのコードが例外を発生させる可能性があります。
SynchronizingObject property (.NET only)/SynchronizingObjectプロパティ(.NETのみ)
The ADORecordset object can raise asynchronous events. By default, these events run in thread other than the main thread of the VB.NET application. This detail can cause problems and unexpected crashes if the code in the event handler accesses one or more user interface elements, such as a form or a control. You can avoid this problem by assigning a form or a control reference to the SynchronizingObject property. Any form or control will do:
ADORecordsetオブジェクトは非同期イベントを発生させることができます。デフォルトでは、これらのイベントはVB.NETアプリケーションのメインスレッド以外のスレッドで実行されます。イベントハンドラーのコードが、フォームやコントロールのような、一つ以上のユーザーインターフェース要素にアクセスする場合、細部において問題が起こったり、予期しないクラッシュが発生する可能性があります。利用者は、SynchronizingObjectプロパティを参照するフォームやコントロールを割り当てることで、この問題を回避することができます。どのようなフォームやコントロールでも次のように記述することができます。
' if inside a form class, "Me" is a reference to the current form
Dim rs As New ADORecordset
rs.SynchronizingObject = Me
When an ADORecordset is created, this property is set equal to ADOConfig.Synchronizing property.
ADORecordsetが作成されると、このプロパティはADOConfig.Synchronizingプロパティと等しくなります。
UpdateBatch method/UpdateBatchメソッド
This method works as in ADODB, except for the following details:
以下の特徴を除いて、このメソッドはADODBと同じように動作します。
- the SELECT statement must include the key/identity field of the table (or tables, if it’s a JOIN statement).
- SELECT文はテーブル(JOINステートメントの場合は複数のテーブル)のキーまたは識別用フィールドを含めなければなりません。
- JOIN SQL statements are supported, provided that
- 以下の場合、JOINステートメントはサポートされます。
- the key/identity field of each table is included in the field list
- 以下の場合、JOINステートメントはサポートされます。
- 各テーブルのキーまたは識別用フィールドがフィールドリストに含まれている。
- if * is used to indicate “all fields”, then the joined tables must not have fields with same name
- *が「全フィールド」の意味で使用される場合、結合されたテーブルは同一名のフィールドを持ってはならない。
- old join syntax (e.g. SELECT * FROM Table1,Table2) isn’t supported
- 古いjoin構文(例 SELECT * FROM Table1,Table2)はサポートされません。
- all valid SQL syntax for table names are supported (e.g. database.dbo.table), except
- 以下の場合を除いて、テーブル名(例 database.dbo.table)に対するすべての有効なSQL構文はサポートされます。
- field names and table names cannot include dots (even if names are included between square brackets or double quotes)
- (角括弧や二重引用符で囲まれていたとしても)フィールド名とテーブル名にドットを含むことはできません。
- if a table name in the FROM clause is embedded in square brackets (or double quotes), then the same enclosing delimiters must be used if the table name is used a prefix for the field name. For example:
- FROM節のテーブル名が角括弧(または二重引用符)で囲まれていた場合、テーブル名がフィールド名の接頭辞として使用されるのなら、デリミタを含んでいる同じ名称が使用されなくてはなりません。例えば、
SELECT [Order Details].OrderID FROM [Order Details] is supportedサポートされます
SELECT [Order Details].OrderID FROM “Order Details” isn’t supportedサポートされません
- derivate tables aren’t supported (e.g. SELECT * FROM (SELECT ….) ).
- 派生テーブルはサポートされません。(例 SELECT * FROM (SELECT ….))
- the UNION clause isn’t supported.
- UNION節はサポートされません。
- if two UpdateBatch commands are issued on the same recordset and you need to modify one or more fields of a row that has been already batch-updated, it is necessary that you perform the following command after the first UpdateBatch and before modifying the fields:
- 二つのUpdateBatchコマンドが同じレコードセットに発行され、既に一括更新された行の一つ以上のフィールドを変更する必要がある場合、最初のUpdateBatchの後とフィールドを変更する前に以下のコマンドを実行する必要があります。
myRecordset.DataTable.AcceptTable()
Notice that an ADODB UpdateBatch command works even when CursorType=Keyset/Dynamic and LockType=BatchOptimistic. In this case, ADODB postpones all changes in the DB until the UpdateBatch command is executed. In the same circumstances, the ADOLibrary updates each record immediately.
ADODBのUpdateBatchコマンドはCursorType=Keyset/DynamicやLockType=BatchOptimisticであっても動作することに注意してください。この場合、ADODBは、UpdateBatchが実行されるまで、データベースにおける変更すべてを延期します。同じ状況において、ADOLibraryは各レコードを即座に更新します。
If the table being updated has an auto-increment field or uses a key that is generated by the database server, current version of ADOLibrary can correctly retrieve the auto-generated key only when working with SQL Server databases.
更新されるテーブルに自動インクリメント列がある場合やデータベースサーバーによって生成されるキーを使用する場合、現在のバージョンのADOLibraryはSQL Serverデータベースに対して動作するときのみ自動的に生成されたキーを正しく取り出します。
The ADOCommand class/ADOCommandクラス
The ADOCommand class is similar and behaves like the ADODB.Command class, except for the following details.
以下の特徴を除いて、ADOCommandクラスはADODB.Commandクラスと似ており同じように動作します。
Command property (.NET only)/Commandプロパティ(.NETのみ)
This readonly property returns the DbCommand object that is used internally by the ADOCommand object. It can be used to access ADO.NET specific members that have no corresponding member under ADODB, for example using the ExecuteScalar method to retrieve single values in a more efficient way.
この読み取り専用プロパティはADOCommand オブジェクトによって内部的に使用されるDbCommandオブジェクトを返します。それはADODB に対応するメンバーがないADO.NETの特定のメンバーにアクセスするために使用することができます。例えば、ExecuteScalarメソッドを使用すればより効率的な方法で一つの値を取得することができます。
Sub GetSingleValue(ByVal cmd As ADOCommand)
Dim value As Object
value = cmd.Command.ExecuteScalar()
' …
End Sub
The ADOCommand class exposes additional readonly properties, named OleDbCommand, SqlCommand, and OdbcCommand – which return a strongly-typed Command object, or Nothing if the ADO.NET data provider used internal doesn’t match the property type.
ADOCommandクラスには、OleDbCommand、SqlCommand、OdbcCommandという読み取り専用プロパティが追加されています。これらのプロパティは強く型付けされたCommandオブジェクトを返しますが、内部で使用されるADO.NETデータプロバイダがプロパティ型と一致しない場合はNothingを返します。
CommandBehavior property (.NET only)/CommandBehaviorプロパティ(.NETのみ)
The value of this property is used internally and is assigned to the CommandBehavior property of the inner Command object. For example, if you know that the rowset being read contains only a single row, you can slightly optimize execution as follows
このプロパティの値は、内部のCommandオブジェクトのCommandBehaviorプロパティに対して割り当てられ、かつ内部的に使用されます。例えば、読み込まれる行セットが単一行のみを含むことが分かっている場合、次のように若干楽観的な実行を行うことができます。
Sub TestSingleRow(ByVal cmd As ADOCommand)
cmd.CommandBehavior = CommandBehavior.SingleRow
Dim rs As ADORecordset = cmd.Execute()
' …
End Sub
IgnoreDataSchema property (.NET only)/IgnoreDataSchemaプロパティ(.NETのみ)
If this property is set to False (the default value) and you open a Recordset in batch optimistic mode, ADOLibrary queries the data source and retrieves schema information about individual fields. This information is used to correctly implement a few members of the Field object, namely DefinedSize, NumericScale, Precision, and Properties. If you are sure that your code doesn’t rely on this metadata information, you can speed up Recordset.Open methods by setting this property to True.
このプロパティに(初期値)Falseをセットし、一括楽観モードでレコードセットをオープンする場合、ADOLibraryはデータソースに照会し、個々のフィールドに関するスキーマ情報を取り出します。この情報はFieldオブジェクトの2、3のメンバーを正しく実装するために使用されます。すなわち、DefinedSize、NumericScale、PrecisionとPropertiesです。コードがこのメタデータ情報に依存しないことが確実である場合、このプロパティにTrueをセットしてRecordset.Openメソッドの速度を向上させることができます。
Sub ReadWithNoSchema(ByVal cmd As ADOCommand)
cmd.IgnoreDataSchema = True
Dim rs As ADORecordset = cmd.Execute()
' …
End Sub
The default value of this property when the ADOCommand object is instantiated is equal to ADOConfig.IgnoreDataSchema.
ADOCommandオブジェクトがインスタンス化されたときのこのプロパティの初期値はADOConfig.IgnoreDataSchemaと等価です。
LibraryKind property (.NET only)/LibraryKindプロパティ(.NETのみ)
By default, ADOLibrary internally uses the OleDb ADO.NET data provider. If you know that a given ADOCommand object will only access a specific database – for example, Microsoft SQL Server – you can improve performance by assigning a new value to this property:
デフォルトでは、ADOLibraryはOleDb用ADO.NETデータプロバイダを内部的に使用します。ADOCommandオブジェクトが特定のデータベースにのみ接続することがわかっている場合、―例えば、Microsoft SQL Server―このプロパティに新しい値を割り当てて性能を向上させることができます。
Dim cmd As New ADOCommand cmd.LibraryKind = ADOLibraryKind.SqlClient
Valid values for the LibraryKind property are: OleDb, SqlClient, Odbc, OracleClient. However, version 1.0 of ADOLibrary only supports the OleDb and SqlClient values. Any other value throws an exception (if ThrowOnUnsupportedMembers is True) or are ignored. If this property is left unassigned, it is set equal to the value of ADOConfig.LibraryKind property.
LibraryKindプロパティにに対して有効な値は、OleDb、SqlClient、Odbc、OracleClientです。 ただし、ADOLibraryのバージョン1.0はOleDbとSqlClientのみサポートします。その他の値は例外を発生させるか(ThrowOnUnsupportedMembersがTrueなら)無視されます。このプロパティが設定されない場合、ADOConfig.LibraryKindプロパティの値に等しくなります。
Name property/Nameプロパティ
This property retains the value assigned to it, but is otherwise ignored by ADOLibrary.
このプロパティは割り当てられた値を保持しますが、そうでなければADOLibraryによって無視されます。
CommandStream property/CommandStreamプロパティ
This property is marked as obsolete always returns Nothing. Assigning a different value to it throws an exception (if ADOConfig.ThrowOnUnsupportedMembers property is True).
このプロパティは既に使用されていないと見なされ、常にNothingを返します。異なる値を割り当てると(ADOConfig.ThrowOnUnsupportedMembersプロパティがTrueの場合は)例外が発生します。
Dialect property/Dialectプロパティ
This property is marked as obsolete and always returns the following GUID:
このプロパティは既に使用されていないと見なされ常に次のGUIDが返されます。
{C8B521FB-5CF3-11CE-ADE5-00AA0044773D}
which corresponds to the SQL language dialect. Assigning a different value to it throws an exception (if ADOConfig.ThrowOnUnsupportedMembers property is True).
これはそのSQL言語に対応します。異なる値を割り当てると(ADOConfig.ThrowOnUnsupportedMembersプロパティがTrueの場合は)例外が発生します。
NamedParameters property/NamedParametersプロパティ
This property is marked as obsolete always returns False. Assigning a different value to it throws an exception (if ADOConfig.ThrowOnUnsupportedMembers property is True).
このプロパティは既に使用されていないと見なされ常にFalseを返します。異なる値を割り当てると(ADOConfig.ThrowOnUnsupportedMembersプロパティがTrueの場合は)例外が発生します。
Parameters collection/Parametersコレクション
As it happens with ADODB, when an ADOCommand object contains a query with parameters, ADOLibrary has to parse the SQL statement to isolate each and every parameter, corresponding to “?” placeholders. In addition to having an open connection, the following restrictions apply to the SQL SELECT statement assigned to the CommandText property:
ADODBにおいて発生でするように、ADOCommandオブジェクトがパラメータを伴うクエリーを含むとき、ADOLibraryは「?」プレースホルダに対応して各パラーメータを分離するためにSQL文を解析しなければなりません。さらにオープン時接続に加えて、次の制限がCommandText プロパティに割り当てられるSELECT文に対して適用されます。
- aliased columns are supported (e.g. “LastName AS LN”), but aliased expressions aren’t (e.g. “SUBSTRING(title,1,10) AS Title”).
- 列の別名(例 ”LastName AS LN”)はサポートされますが、式の別名(例 ”SUBSTRING(title,1,10) AS Title”)はサポートされません。
- aliased tables aren’t supported.
- テーブルの別名はサポートされません。
- derived tables aren’t supported (e.g. “SELECT a.au_lname AS Name, d1.title_id FROM authors a, (SELECT title_id, au_id FROM titleauthor) AS d1”).
- 派生テーブルはサポートされません。(例 ”SELECT a.au_lname AS Name, d1.title_id FROM authors a, (SELECT title_id, au_id FROM titleauthor) AS d1″)
- parameters can’t precede the BETWEEN keyword: for example “…WHERE fieldname BETWEEN ? AND ?” is supported but “… ? BETWEEN 10 AND 20” is not.
- BETWEENの前にパラメータを置くことはできません。例えば、「…WHERE fieldname BETWEEN ? AND ?」はサポートされますが、「… ? BETWEEN 10 AND 20」はサポートされません。
- if the statement contains a nested SELECT, parameters can’t appear both in the main WHERE clause and in the nested SELECT statements. (Parameters can correspond to fields belonging to different tables only if the tables appear in a JOIN.)
- ステートメントが入れ子になったSELECTを含む場合、パラメータは主となるWHERE節にも入れ子のSELECT文にも存在することができません。パラメータは、テーブルがJOINにある場合のみ、異なるテーブルに属するフィールドに対応することができます。
The following restrictions apply to INSERT SQL statements:
次の制限はINSERT文に対して適用されます。
- the list of columns must be present (* isn’t allowed) and the VALUES keyword must be present.
- 列リスト(*は許可されません)とVALUESキーワードは必須です。
- parameters used in the VALUES can’t appear in expressions (i.e. must be the only value assigned to a field).
- VALUESに使用されるパラメータは式の中で使うことはできません。(すなわち、フィールドに対して割り当てられた値にのみ使用できます。)
The following restrictions apply to EXEC SQL statements and stored procedure invocations:
次の制限はEXEC文とストアドプロシージャの呼び出しに適用されます。
- parameters can appear in the list of stored procedure arguments, but can’t be part of an expression. For example, “EXEC spname ?, ‘1abc’, ?” is legal, but “EXE spname ?+12” is not.
- パラメータはストアドプロシージャ引数に使用できますが、式の一部にすることはできません。例えば、「EXEC spname ?, ‘1abc’, ?」は適合しますが、「EXE spname ?+12」は適合しません。
Prepared property/Preparedプロパティ
This property is marked as obsolete always returns False. Assigning a different value to it throws an exception (if ADOConfig.ThrowOnUnsupportedMembers property is True).
このプロパティは既に使用されていないと見なされ常にFalseを返します。異なる値を割り当てると(ADOConfig.ThrowOnUnsupportedMembersプロパティがTrueの場合は)例外が発生します。
Execute method/Executeメソッド
This method works as in ADODB, except it throws an exception if multiple, semicolon-delimited SQL statements are passed as an argument. Moreover, if the Execute method invokes a stored procedure that returns no records and you are interested in the value returned by the stored procedure, then it is mandatory to specify adExecuteNoRecords in the options argument (in ADODB passing this value is optional):
このメソッドは、複数のセミコロンで区切られたSQL文が引数として渡されると例外を発生させる以外は、ADODBと同じように動作します。さらに、ストアドプロシージャによって返される値に関心があるにも関わらず、Executeメソッドがレコードを返さないストアドプロシージャを呼び出す場合、options引数(ADODBではこの値は任意です)でadExecuteNoRecordsを指定することが必須となります。
' cmd points to a stored proc that returns no records ' and has an output parameter cmdはレコードを返さないストアドプロシジャを指しており、出力用パラメータを一つ持っています cmd.Execute( , , ADOExecuteOptionEnum.adExecuteNoRecords) ' you can retrieve the stored procedure’s return value now ここでストアドプロシージャの戻り値を取得することができます Dim retValue As Object = cmd.Parameters(0).Value
The ADOField class/ADOFieldクラス
The ADOField class is similar to and behaves like the ADODB.Field class, except for the following details.
ADOFieldクラスは、次にあげる特徴以外はADODB.Fieldクラスと似ており、同じように動作します。
Attributes property/Attributesプロパティ
The Attributes property works as in ADODB, except it never returns the following bits: adFldMayDefer, adFldUnknownUpdatable, adFldFixed, adFldMayBeNull, adFldRowID, adFldRowVersion, adFldCacheDeferred
Attributesプロパティは次の値を戻さないこと以外はADODBのように動作します。すなわち、adFldMayDefer、adFldUnknownUpdatable、adFldFixed、adFldMayBeNull、adFldRowID、adFldRowVersion、adFldCacheDeferredは戻されません。
Status property/Statusプロパティ
The Status property is marked as obsolete and always returns zero, because it is only useful with Fields belonging to a Record object (which the ADOLibrary doesn’t support).
Statusプロパティは、(ADOLibraryがサポートしない)Recordオブジェクトに属するフィールドにとって便利であるという理由から、既に使用されていないと見なされ常に0を返します。
HasDefaultValue (.NET)/HasDefaultValueプロパティ(.NETのみ)
This property (which is missing in ADODB) should be set to True for non-nullable fields for which a default value is defined inside SQL Server. Without this information, ADOLibrary is unable to build the correct SQL string when a new record is added to a server-side keyset and dynamic cursors.
このプロパティは、初期値がSQL Server内部で定義される非NULL列に対してはTrueをセットされるべきです。この情報なしでは、新しいレコードがサーバーサイドのキーセットや動的カーソルに追加される場合、ADOLibraryは正しいSQL文をビルドすることができません。
You typically need to set this property only once, immediately after opening a Recordset with CursorType=adOpenKeyset or CursorType=adOpenDynamic, only for those fields that have a default value defined in SQL Server, as in this example:
通常はこのプロパティを、レコードセットがCursorType=adOpenKeysetまたはCursorType=adOpenDynamicでオープンされた直後に、SQL Serverに定義された初期値を持つそれらのフィールドに対してのみ、次の例のように、一回だけセットしなければなりません。
rs.Open("SELECT * FROM Customers", myConnection, adOpenKeyset)
' we know that the Country field has a default value set equal to "US"
私たちはCountry列が「US」に等しい初期値を持つことを知っています
rs.Fields("Country").HasDefaultValue = True
...
If you open a Recordset other than keyset or dynamic, or if you don’t plan to add records to this Recordset, then you can ignore the HasDefaultValue property.
キーセットや動的ではないレコードセットをオープンする場合、もしくは、このレコードセットにレコードを追加するつもりがない場合、HasDefaultValueプロパティを無視することができます。
The ADOParameter class/ADOParameterクラス
The ADOParameter class is similar to and behaves like the ADODB.Parameter class, except for the following details.
ADOParameterクラスはADODB.Parameterクラスに似ており、次の特徴を除いて同じように動作します。
Attributes, NumericScale, Precision, Type, Size properties/Attributesプロパティ、NumericScaleプロパティ、Precisionプロパティ、Typeプロパティ、Sizeプロパティ
For improved performance, these properties are read “on demand”, when any of them is accessed for the first time. For this reason, the first time you access any of these properties (for any parameter of a given ADOCommand object) it is mandatory that the connection is still open, else an exception is thrown.
性能改善のため、これらのプロパティは、それらが最初にアクセスされるときに、「要求に応じて」読み込まれます。この理由のため、最初に(ADOCommandオブジェクトのいずれかのパラメータ対する)これらのプロパティにアクセスするときは、接続がオープンされていることが必須となり、そうでない場合は例外が発生します。
The ADOStream class/ADOStreamクラス
The ADOStream class is similar to and behaves like the ADODB.Stream class, except for the following details.
ADOStreamクラスはADODB.Streamクラスに似ており、以下の特徴を除いて同じように動作します。
ReadText, WriteText, SkipLine methods/ReadTextメソッド、WriteTextメソッド、SkipLineメソッド
These methods aren’t currently implemented
これらのメソッドは現在提供されていません。
The ADORecord class/ADORecordクラス
None of the members in this class is currently implemented.
このクラスのメンバーは現在まったく提供されていません。