ADOCE for ADO Programmers


ADOCE for ADO Programmers
老狼按:最近Pocket PCのデータベースの开発をしています.この文章は私にたくさんの助けをくれました.だから、私はそれを翻訳しました.皆さんに助けてほしいです.
PCからPocket PCに自分の知識とコードを移植する必要があるADO開発者ですか?ADOとADOCEの類似点と相違点をいくつかのコードインスタンスで説明します.
Download the 619-CF.exe from the MSDN Code Center .
What You Need
· Microsoft® eMbedded Visual Tools .
· Microsoft SQL Server 2000 Developer Edition .
· SQL Server 2000 Windows® CE Edition .
· Microsoft ADOCE (ActiveX® Data Objects CE) 3.1 included with SQL Server 2000 Windows CE Edition.
· To try the server-side examples, you need Microsoft Visual Studio® and ADO 2.6.
Gotchas
CreateObject宣言にメモリ・ホールがあるので、プログラムにADOCEオブジェクトを一度だけ作成したほうがいいです.インスタンス・コードでは、CreateObjectの呼び出しを各イベント・プロシージャに配置しますが、ADOコードを比較するためだけです.
Languages Supported
English
Data Access
データアクセス
ほとんどのエンタープライズ・アプリケーションはデータ中心であり、情報の保存方法を知る必要があります.私の趣味はデータを保存することで、Pocket PCの上で使うのは本当のデータベースです——SQL Server 2000 Windows CE Edition.そのため、私の最初の提案はあなたが必要とするSQL Server 2000 Developer Editionの許可を得ることです.
SQL Server 2000 Windows CE Editionをインストールすると、ADOCE 3.1、最新バージョンが同時に入手できます.PCの最新版ADO 2.6と比較します.
Main Differences
主な差異
では、まず重要な違いを大まかに見てみましょう.ADOCEでサポートされていないADO機能のリストを次に示します.
· Command and Parameter objects
· Collection objects
· Property object
· Recordset persistence (Recordset.Save)
· Asynchronous queries
· Disconnected Recordsets
· Dynamic creation of Recordsets
· Multiple queries (Recordset.NextRecordset)
私にとって、ないRecordset persistenceは、Pocket PC上の他のプログラムが呼び出すために結果セットをExtensible Markup Language(XML)に保存できないことを意味します.もっと重要なのは、XMLデータを結果セットに格納できないことです.これにより、サーバコンポーネントからPocket PCへのデータ変換または逆の変換が必要になります.私もいくつかの変換が必要です.私の提案はOdyssey Softwareが何を提供しているかを見ることです.彼らのCefusionとViaXML製品はここで役に立ちます.より長期的な(Microsoft.NETを読む)方法を探してデータを変換している場合は、pocketSOAPを見てください.
いずれにしても、ほとんどの重要な機能はADOCEで実現されている.同じデータ・アクセス環境でのいくつかの違いを見てみましょう.
Data Retrieval
データ取得
最も一般的なアイデアで始めましょう.データストレージからいくつかの情報を得る必要がある場合.PCでは、ListViewコントロールに記入したデータ取得コードが次のように書かれます.
Dim litm As ListItem
Dim laco As Connection
Dim lars As Recordset
Dim lsSQL As String
 ' Add column headers
lvwArticles.ColumnHeaders.Add , , "Description", 2500
lvwArticles.ColumnHeaders.Add , , "Price", 600, lvwColumnRight
lvwArticles.ColumnHeaders.Add , , "Stock", 600, lvwColumnRight
' Create objects
Set laco = CreateObject("ADODB.Connection")
Set lars = CreateObject("ADODB.Recordset")
' Open Connection
laco.Open "Provider=SQLOLEDB;Data Source=SERVERNAME;" & _
 "Initial Catalog=DBNAME;Trusted_Connection=Yes"
' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly
' Clear list and get item rows
Do While Not lars.EOF
 Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value)
 litm.SubItems(1) = lars("Price").Value
 litm.SubItems(2) = lars("Stock").Value
 lars.MoveNext
Loop
 
' Close Recordset and Connection
lars.Close
laco.Close

あなたはPocket PCでこのようにします.
Dim litm As ListItem
Dim laco As Connection
Dim lars As Recordset
Dim lsSQL As String
' Add column headers
lvwArticles.ColumnHeaders.Add , , "Description", 2500
lvwArticles.ColumnHeaders.Add , , "Price", 600, lvwColumnRight
lvwArticles.ColumnHeaders.Add , , "Stock", 600, lvwColumnRight
' Create objects
Set laco = CreateObject("ADOCE.Connection.3.1")
Set lars = CreateObject("ADOCE.Recordset.3.1")
' Open Connection
laco.Open "Provider=Microsoft.SQLSERVER.OLEDB.CE.1.0;" & _
 "Data Source=\DBNAME.sdf"
' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly
' Clear list and get item rows
Do While Not lars.EOF
 Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value)
 litm.SubItems(1) = lars("Price").Value
 litm.SubItems(2) = lars("Stock").Value
 lars.MoveNext
Loop
 
' Close Recordset and Connection
lars.Close
laco.Close

ご覧のように、2つの例には小さな違いがあります.ConnectionオブジェクトのOpenメソッドの接続文字列が異なることが明らかになった.Providerパラメータを無視すると、ADOCEはPocket Accessデータベースファイルにアクセスしたいと仮定します.SQL Server CEは常にファイル名として参照されます.この場合、ファイルはデバイスのルートディレクトリに配置されますが、アプリケーションディレクトリに配置することもできます(たとえば、Data Source=Program FilesAppNameAppName.sdf).
万事そろっている.結論(a)すべてのデータアクセスコードはほとんど修正する必要がなく使用でき、(b)多くのPCプログラムのデータアクセスコードはデータを得ることができ、PCアプリケーションをPocket PCに移植するには大きな努力が必要ないことを認識することができます.
Updating Data
データの更新
次に、データ・ストレージに情報を追加する必要がある場合、別の仮定を見てみましょう.データと同じコードを使用してConnectionオブジェクトとRecordsetオブジェクトを開いたり閉じたりします.PCに似たようなコードを書きます.
' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic
 
' Add new Article
lars.AddNew
lars("Description").Value = "Test"
lars("Price").Value = 50
lars("Stock").Value = 100
lars.Update

Pocket PCでは、このようなコードが表示されます.
' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
 adCmdTableDirect
 
' Add new Article
lars.AddNew
lars("Description").Value = "Test"
lars("Price").Value = 50
lars("Stock").Value = 100
lars.Update

ご覧のように、Recordsetを開く方法が違います.更新として、RecordsetはSQL宣言(SELECT)よりもテーブルとして開かれています.PC(ADO)でよくやったかもしれませんが、この点はPCからPocket PCにコードを移植したときに変えなければなりません.
更新の状況を見てみましょう.これはPCのコードです.
' Open Recordset
lsSQL = "SELECT * FROM Article WHERE Description='Test'"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic
 
' Update Article
If Not lars.EOF Then
 lars("Price").Value = 200
 lars.Update
End If

これはPocket PCのものです.
' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
 adCmdTableDirect
lars.Find "Description='Test'"
 
' Update Article
If Not lars.EOF Then
 lars("Price").Value = 200
 lars.Update
End If

PC上のようにSQL宣言(SELECT)で更新可能なRecordsetを作成することは不可能であり、Findメソッドを使用してRecordsetで希望する場所を得ることができます.
パフォーマンスを向上させる場合は、「raw」SQL UPDATE statementを使用して同じことをすることができます.
laco.Execute "UPDATE Article SET Price=200 WHERE Description='Test'"

構想を改善するために、データを削除する方法を見てみましょう.PCでは、コードは次のようになっています.
' Open Recordset
lsSQL = "SELECT * FROM Article WHERE Description='Test'"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic
 
' Delete Article
If Not lars.EOF Then lars.Delete

Pocket PCに対応するコード:
' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
 adCmdTableDirect
lars.Find "Description='Test'"
 
' Delete Article
If Not lars.EOF Then lars.Delete

ここは更新されたコードとよく似ています.Findメソッドの結果セットは、検索基準に一致するレコードのみを含むRecordsetであることに注意してください.これは、PCとPocket PCで同じ内容のRecordsetが得られることを意味します.これは、Pocket PCのRecordsetにもっと多くのことをしたいのを防ぐためです.同じテーブルを開いたからです.
また、SQL DELETE文を使用して、ほぼ同じことをすることができます.
laco.Execute "DELETE Article WHERE Description='Test'"

私が「ほとんど」と言ったのは、最後のExecuteがクエリー条件に一致するすべてのレコードを削除するからですが、上のレコードは最初のレコードだけを削除します.実際の場合、検索比較は同じ結果を生成するために一意のキーに設定される場合があります.
完全な例は、例のコードを見てください.
Conclusion
の最後の部分
PC上のADOの多くがPocket PCで使用できることを知っています.いくつかの処理方法が少し異なっていても.同様に、Pocket PCプログラムを書くとき、ほとんどのデータアクセスコードはいくつかの変更を通じてあなたのプログラムに適用することができます.
今日はなぜPC上のエンタープライズクラスのプログラムをPocket PCに移植しないのですか?すぐに始めて、他の人に展示します.これはあなたの次の工事です.
aawolfのコラムへようこそ:http://www.csdn.net/develop/author/netauthor/aawolf/