ADO.NET Provider for Sage 50 UK

Build 24.0.9062

明示的なデータのキャッシュ

明示的なキャッシュの場合は(AutoCache =false)、どのデータをキャッシュするかと、ライブデータではなくキャッシュをいつクエリするかを厳密に指定します。明示的なキャッシュでは、CACHE ステートメントを使用して、キャッシュの内容を完全に制御できます。このセクションでは、本製品 が提供するキャッシュ機能の活用方法をいくつか説明します。

キャッシュの作成

キャッシュにデータをロードするには、次のステートメントを発行します。

CACHE SELECT * FROM tableName WHERE ...

ステートメントが発行されると、tableName 内の一致するデータが対応するテーブルにロードされます。

キャッシュの更新

このセクションでは、キャッシュを更新する2つの方法について説明します。

SELECT ステートメントを使った更新

次の例は、キャッシュテーブル内で変更された行を更新し、不足している行を追加するステートメントを示します。ただし、このステートメントはキャッシュ内にすでに含まれている余分な行は削除しません。このステートメントは、新しい行をマージするか、または既存の行を更新するだけです。

C#

Sage50UKCommand cmd = new Sage50UKCommand("CACHE SELECT * FROM TradingAccounts WHERE TradingAccountUUID = 'c2ef66a5-a545-413b-9312-79a53caadbc4'", connection);
cmd.ExecuteNonQuery();
connection.Close();

VB.NET

Dim cmd As Sage50UKCommand = New Sage50UKCommand("CACHE SELECT * FROM TradingAccounts WHERE TradingAccountUUID = 'c2ef66a5-a545-413b-9312-79a53caadbc4'", connection)
cmd.ExecuteNonQuery()
connection.Close()

TRUNCATE ステートメントを使った更新

次の例は、キャッシュテーブル内で変更された行を更新し、不足している行を追加するステートメントを示します。このステートメントは、ライブデータソースに存在しないキャッシュテーブル内の行も削除できます。

C#

Sage50UKCommand cmd = new Sage50UKCommand("CACHE WITH TRUNCATE SELECT * FROM TradingAccounts WHERE TradingAccountUUID = 'c2ef66a5-a545-413b-9312-79a53caadbc4'", connection);
cmd.ExecuteNonQuery();
connection.Close();

VB.NET

Dim Sage50UKCommand As cmd = New Sage50UKCommand("CACHE WITH TRUNCATE SELECT * FROM TradingAccounts WHERE TradingAccountUUID = 'c2ef66a5-a545-413b-9312-79a53caadbc4'", connection)
cmd.ExecuteNonQuery()
connection.Close()

オンラインまたはオフラインモードでデータをクエリ

このセクションでは、オンラインまたはオフラインモードでデータをクエリする方法について説明します。

Online:キャッシュテーブルの選択

次の例に示すように、tableName#CACHE 構文を使用して、オンラインのままキャッシュに対して明示的にクエリを実行することができます。

SELECT * FROM TradingAccounts#CACHE

Offline:キャッシュテーブルの選択

Offline がtrue に設定されている場合、実行するすべてのSELECT ステートメントは、キャッシュテーブルを明示的に指定するかどうかに関係なく、常にローカルキャッシュデータベースに対して実行されます。キャッシュデータだけが誤って更新されることがないように、Offline モードではキャッシュの変更は無効化されます。Offline が設定されている場合にDELETE/UPDATE/INSERT ステートメントを実行すると、例外が発生します。

次の例は、Offline がtrue に設定されているため、ライブデータソースからではなく、ローカルキャッシュに対してSELECT を実行します。

C#

using (Sage50UKConnection connection = new Sage50UKConnection("URL=http://localhost:5493/sdata/accounts50/GCRM/{C4C863BE-B098-4A7D-A78B-D7A92B8ADB59};User=Manager;Password=xxxxxx;Offline=true;Cache Location=C:\\cache.db;") {
  String query = "SELECT * FROM TradingAccounts WHERE TradingAccountUUID='c2ef66a5-a545-413b-9312-79a53caadbc4' ORDER BY Name ASC";
  Sage50UKCommand cmd = new Sage50UKCommand(query, connection);
  cmd.ExecuteReader();
}

VB.NET

Using conn As New Sage50UKConnection("URL=http://localhost:5493/sdata/accounts50/GCRM/{C4C863BE-B098-4A7D-A78B-D7A92B8ADB59};User=Manager;Password=xxxxxx;Offline=true;Cache Location=C:\\cache.db;")
  Dim query As String = "SELECT * FROM TradingAccounts WHERE TradingAccountUUID='c2ef66a5-a545-413b-9312-79a53caadbc4' ORDER BY Name ASC"
  Dim cmd As Sage50UKCommand = New Sage50UKCommand(query, connection)
  cmd.ExecuteReader()
End Using

キャッシュからのデータの削除

データベースへの直接接続を構築することによって、キャッシュからデータを削除できます。本製品 はキャッシュからデータを手動で削除することをサポートしていないことに注意してください。

一般的なユースケース

一般的なキャッシュの用途は、アプリケーションからのクエリは常にキャッシュデータに対して実行し、キャッシュの更新は設定された間隔(1日1回、2時間ごとなど)でのみ実行するというものです。この実装には2つの方法があります。

  • AutoCache = false とOffline = false。アプリケーションによって発行されるすべてのクエリは、明示的にtableName#CACHE テーブルを参照します。キャッシュを更新する必要がある場合、アプリケーションはtableName#CACHE ... ステートメントを実行して、キャッシュデータを最新の状態に保ちます。
  • Offline = true。キャッシュは、アプリケーションでは透過的に処理されます。すべてのクエリは常にテーブルに対して実行されるため、ほとんどのアプリケーションコードは、キャッシュの実行を認識する必要はありません。キャッシュデータを更新するには、Offline = false で個別の接続を作成し、tableName#CACHE ... ステートメントを実行するだけです。

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9062