4

重複の可能性:
SqlCommand-Object から生成された SQL ステートメントを取得する方法は?

ロギング目的でテーブル アダプタによって実行された SQL クエリを取得する方法を知りたいです。

例えば:

入力:

RandomTableAdapter tableAdapter = new RandomTableAdapter();
tableAdapter.Insert("val","val","val","val");

出力:

ログに記録したいのは、挿入コマンドを実行するためにテーブル アダプターによって生成される挿入ステートメントです。

Insert INTO RandomTable VALUES ('val', 'val', 'val', 'val');

これどうやってするの?これに関する提案はありますか?

4

1 に答える 1

0

この回避策を使用して ParameterName をその値に置き換えますが、値の書式設定を自分で管理する必要があり、時間がかかる可能
性があり、Insert の実行後にパラメーターを取得する必要があるため、適切ではありません。

コード:

var usersTableAdapter = new testDataSetTableAdapters.usersTableAdapter();


            usersTableAdapter.Insert(4, "home", "origin", "email@host.com", "realname", "spec", 1, "username", "usernick", "whereform");
            var cmd = usersTableAdapter.Adapter.InsertCommand;
            var text = cmd.CommandText;
            var sb = new StringBuilder(text);
            foreach (SqlParameter cmdParam in cmd.Parameters)
            {
                if (cmdParam.Value is string)
                    sb.Replace(cmdParam.ParameterName, string.Format("'{0}'", cmdParam.Value));
                else
                    sb.Replace(cmdParam.ParameterName, cmdParam.Value.ToString());
            }
            Console.WriteLine(sb.ToString());
于 2012-05-28T10:34:16.793 に答える