1

私は次の状況を使用しています:

cmd.CommandText = "insert into city (id, code, name, uf) values ??(@ id, @ code, @ name, @ uf);"

パラメータに指定されたフォーマット文字列の後にコマンドを実行するのは何だろうか

状況:

insert into city (id, code, name, uf) values ??(5, 5, 'BIG COUNTRY', 'MS');- 例えば

パラメータが供給された後、この「文字列」がすでに供給され、文字列に移動しますか??

私の考えはログを作成することなので、システムログを生成するには、すでに入力されているパラメーターを取得する必要があります!

4

2 に答える 2

1

SQL Server を使用している場合、代わりにSQL Server Profilerを使用することを検討しましたか? SQL Server を使用していない場合は、他の RBDMS システムに同様のツールが必要です...

このタイプのログ記録をアプリケーションに追加するよりもおそらく手間がかからず、データベースに実際に送信されたものを確実に確認でき、ログ コードが誤って解釈を誤ったりクエリを誤ってログに記録したりしないことも保証されます。

プロファイリングを嫌う場合 (プロファイリングのオーバーヘッドを処理できない実稼働データベースについて話している場合は正当化されます)、次のようなものでログを組み立てることができます。

var query = cmd.CommandText;

foreach (var p in cmd.Parameters)
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}
于 2012-05-04T17:28:28.297 に答える
1

クエリは、@パラメーターのプレースホルダーが配置された状態で DB に送信されます。パラメータは個別にクエリに送信されます...つまり、クライアントは完全な SQL ステートメントをアセンブルしません。

于 2012-05-04T17:14:00.833 に答える