8

定期的に(Webサービスを介して)更新するSQLCompactEditionデータベースがあります。

データベースに書き込む部分に時間がかかりすぎています。私は現在、Linq to Datasetsでそれを行っています(この質問に見られるように)。SQLCeResultSetを使用して実行すると、より高速に動作すると聞いています。

だから、私がこのようなテーブルを持っているとすると:

tblClient
   +-CLIENT_ID {一意の識別子}(主キー)
   +-CLIENT_NAME {varchar(100)}
   +-CLIENT_ACTIVE{ビット}

そして、次のようなWebサービスから取得するオブジェクトがあります。

class Client
{
   public Guid ClientID { get; set; }
   public String ClientName { get; set; }
   public bool Active { get; set; }
}

100個のクライアントオブジェクトをデータベースに取り込むにはどうすればよいですか?

既存の行を更新し、データベースにまだ存在しない行を挿入しますか(主キーによって決定されます)?

どんなサンプルコードでも素晴らしいでしょう。私は持っていますが、SqlCeConnection他には何もありません。

助けてくれてありがとう!

4

1 に答える 1

13

次のようになります。

(挿入または更新用に編集)

void Foo(SqlCeConnection connection)
{
    using (var cmd = new SqlCeCommand())
    {
        cmd.CommandType = CommandType.TableDirect;
        cmd.CommandText = "MyTableName";
        cmd.Connection = connection;
        cmd.IndexName = "PrimakryKeyIndexName";

        using (var result = cmd.ExecuteResultSet(
                            ResultSetOptions.Scrollable | ResultSetOptions.Updatable))
        {
            int pkValue = 100; // set this, obviously

            if (result.Seek(DbSeekOptions.FirstEqual, pkValue))
            {
                // row exists, need to update
                result.Read();

                // set values
                result.SetInt32(0, 1);
                // etc. 

                result.Update();
            }
            else
            {
                // row doesn't exist, insert
                var record = result.CreateRecord();

                // set values
                record.SetInt32(0, 1);
                // etc. 

                result.Insert(record);
            }
        }
    }
} 
于 2010-07-01T22:33:31.967 に答える