просмотр точного sql после подстановки параметра C # - PullRequest
8 голосов
/ 27 октября 2011

Есть ли способ получить доступ к CommandText сразу после его запуска?У меня есть следующий код:

cmd = new OracleCommand(sql.ToString(), conn);
cmd.Parameters.Add(new OracleParameter("@parm", parmValue));


OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

Что мне нужно знать, это строка команды sql, выполняемая в базе данных, которая уже имеет значение parmValue, содержащееся в sql.Другими словами, я не должен видеть строку «@parm» внутри запроса, а вместо этого значение.

Мне нужно это, чтобы я мог вставить этот sql в базу данных журнала для дальнейшего использования..

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Я не уверен, что Oracle работает именно таким образом, но для большинства других поставщиков БД параметризованный запрос не отправляется на сервер в виде простого текстового запроса, а вместо этого отправляется как команда Execute с надлежащими параметрами.Другими словами, на уровне вашего приложения не происходит подстановка, только в самой БД.Чтобы просмотреть фактическую команду во время ее выполнения на сервере, вы можете посмотреть трассировку / журнал самой базы данных.

1 голос
/ 27 октября 2011

Я не уверен насчет Oracle, но в РСУБД, с которым я работаю лично, это невозможно сделать.

Когда мне нужно было получить параметры и просмотреть результирующий SQL-запрос, я всегда делал это, просматривая коллекцию параметров в коде и извлекая пары имя / значение для записи результирующего запроса или чего-то подобного в наша база данных регистрации ошибок:

StoredProc = InsertCallRecord: Параметры: CallID = 1234; CustID = 651; PersonCalling = Дэйв ...

Я делаю это только при регистрации ошибок, потому что это перетаскивание производительности при каждом вызове, но это может работать и в тестовом сценарии.

...