- PR -

DBログの出力について

1
投稿者投稿内容
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-07-21 15:27
お世話になります。
VB.NET/SQL Server2000にて開発してます。

現在、SQL Serverデータプロバイダを使用して、DBとのやり取りをしており、
DBにアクセスしたときにアプリ側でログを出力したいと考えています。

現状、下記のように
データの読み込み(Fillメソッド)及び、データの更新(Updateメソッド)
をデータアダプタを介して実装しています。

データベース←---→データアダプタ←---→データセット

こういった場合にはどのようなログの出力し、
どのような実装方法があるのでしょうか?

データプロバイダを使わなければ、発行SQL文をログに出力するのですが・・・。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-21 16:55
 SqlDataAdapterをinheritしたクラスを作って、Fillメソッドをオーバーライド、SQLを実行する前に発生するイベントハンドラ(忘れてる)を実装してログに吐き出す。って感じでしょうか。
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-07-21 17:29
Jittaさん

以前、SqlDataAdapterを継承しようとしたのですが、
以下のエラーメッセージが出て断念した事があります。

コード:

'UserControl1' を class 'SqlDataAdapter' から継承できません。
'SqlDataAdapter' は 'NotInheritable' として宣言されています。



どうにかすれば継承できるようになるのでしょうか?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-21 17:33
SqlDataAdapterは継承出来ないので、その方法を採用するのであれば、SqlDataAdapterをラッピングするクラスを作成すれば良いと思います。
また、SqlDataAdapterにはイベントが定義されているので、それを利用すると細かいログ作成が可能になるかもしれません。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-21 17:46
リオッタさん、こんばんは。

引用:

どうにかすれば継承できるようになるのでしょうか?


System.Data.Common.DataAdapter を継承して、内部的に SqlDataAdapter を使う、ってのはどうでしょう。

【追記】
NAL-6295さんと、ほぼ被ってますね...。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2004-07-21 17:53 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-07-21 17:48
こちらで検証できる環境がないのでどんな情報が取得できるかわかりませんがSqlConnection.InfoMessageイベントで取得された情報をログに出力するのは
どうでしょうか?
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-07-21 19:06
お世話になります。

SqlDataAdapterのラッピングクラスを作成するのも考えたのですが。
VB.NETでアプリ開発する際に、データセットをSqlDataAdapterオブジェクトから作成しようと考えています(オブジェクト右クリック→データセットの生成)。
そうした場合のことを考慮すると、ラッピングクラスには手を出せませんでした。

そもそもデータセットは、上記のような方法で作成しないのでしょうか?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-07-21 21:59
単独なクラスでラッピング。

コード:
--- "Webform1.aspx.cs" ---
protected System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
private myAdapter myAdapter1 = new myAdapter(oleDbDataAdapter1); //この行を追加するだけでよい

---"Class1.cs" ---
public class myAdapter
{
	public myAdapter(System.Data.OleDb.OleDbDataAdapter adapter)
	{
		adapter.RowUpdating += new System.Data.OleDb.OleDbRowUpdatingEventHandler(RowUpdating);
	}

	public void RowUpdating(object sender, System.Data.OleDb.OleDbRowUpdatingEventArgs e)
	{
		// イベント処理
	} 
}

1

スキルアップ/キャリアアップ(JOB@IT)