VB.NET Tips DataTableの行を削除する
ADO.Netで、DataTable(データテーブル)内の行を削除するには、2通りのやり方があります。
- Removeメソッドを呼び出し、行そのものを削除
- Deleteメソッドを呼び出し、行のRowStateにDeleteマークをつける
ADO.Netで、DataTable(データテーブル)内の行を削除するには、2通りのやり方があります。
VB.NETのDataSetで使用を奨励されているデータの更新をするためのモデルとして、オプティミスティック同時実行制御があります。
VB.NETでDataSetにDataTableを追加して、コントロールのDataSourceに登録して表示。
この処理を行った後、内容をすべてリロードするときにDataSetに登録したDataTableにそのままリロードをかけ、上書きすると処理速度がぐっと落ちます。
この際、DataSet.Tables プロパティを使用して、DataSet内に該当テーブルが存在するか確認し、DataSet内の該当DataTableをクリアーしてから再登録すると速度も落ちずスムーズに登録できます。
MSDN .NET Framework クラス ライブラリ DataSet.Tables プロパティ
続きを読む…
SQL Server Compact 3.5のSqlCeDataReaderを使用して、”While”ステートメントでループ処理を行い、データをリード。
SQL Server 2008 ExpressではSqlDataReaderを使用して、同様の処理を行えますが処理時間が異常に違います。
なにか、設定が必要なのか?といっても、SqlCeDataReaderにはSeekぐらいしか見あたらないし……
SQL Server 2008 Expressなどでは、SQL文をまとめて発行できます。
例えば下記のような文です。
コマンドラインで操作するときのように”;”でSQL文を締めて発行すれば受け付けてもらえます。
DELETE from hoge WHERE hoge_id = 1; DELETE from hoge WHERE hoge_id = 2; DELETE from hoge WHERE hoge_id = 3;
しかし、SQL Server Compact 3.5ではこれは受け付けてもらえませんん。
仕様のようです、あきらめて一文づつ発行するしかないようです。
SQL Server 2008から、Date型、Time型が追加となりましたね。
SQL Server 2005までは、Datetime型しかなく「日付のみ保持したいのに…」とか、「時刻のみ保持したい…」という場合も、datetime型で代用していました。
ですが、日時をまとめて保持したい場合は、datetime型を利用します。
たとえば、 ‘2009/01/01’の値が入っている該当項目を抽出したいとき、下記のように問い合わせても抽出できません。
比較対象が、datetime型なので日付ではないからです。
SQL Server 2008 Expressなどの、Transact-SQLでは、SQL Server のデータベース コンソール コマンドとして機能するDBCCステートメントが用意されていて、この機能を使用すれば、IDENTITY値の再設定が可能でした。
しかし、SQL Server Compact 3.5 ではDBCCはサポートされていません。
テーブルを一旦、空にして、IDENTITY値を初期値に戻したい時などに必要でした。