как получить полный sql-запрос, включая параметры

Недавно я перешел к параметризованным запросам в SQL. Теперь я получаю жалобу на дату при выполнении запроса

DateTime, представленный строкой, не поддерживается в календаре System.Globalization.GregorianCalendar.

Когда я получаю запрос, я получаю параметризованную строку запроса

SELECT * FROM Table WHERE field = @p_param

Что мне нужно получить, чтобы отладить это

SELECT * FROM Table WHERE field = "2012-03-12 14:09:00"

Как же мне это сделать? Я подозреваю, что это что-то простое, но я просто не вижу этого!

Параметр datetime добавляется со следующим:

sql2.Parameters.Add("@p_UpdateTime", SqlDbType.DateTime).Value = DateTime.Parse(updateTime);

и время безотказной работы устанавливается с помощью

String updateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ff");

person Neo    schedule 12.03.2012    source источник
comment
как выглядит ваша команда?   -  person Daniel A. White    schedule 12.03.2012
comment
Опубликуйте код, где вы настраиваете запрос, а затем, как вы печатаете полный запрос. Судя по всему, возможно, вы случайно включили переменную p_param в виде строки?   -  person BoredAndroidDeveloper    schedule 12.03.2012
comment
Дело в том, что команда SQL никогда не преобразуется во вторую ожидаемую строку! Команда SQL с параметром отправляется на SQL Server вместе со списком параметров. Значения параметров никогда фактически не заменяются в команде SQL в виде строки, поэтому вы не можете получить такое представление — оно никогда не будет существовать!   -  person marc_s    schedule 12.03.2012
comment
на это уже ответили. stackoverflow .com/questions/2000343/   -  person PraveenVenu    schedule 12.03.2012
comment
Вы не можете запустить профилировщик SQL для базы данных, чтобы увидеть, как выполняется команда?   -  person Paulie Waulie    schedule 12.03.2012


Ответы (5)


Используйте профилировщик SQL Server (поставляется со всеми серверами sql). Он покажет полные команды, отправленные на SQL-сервер.

person Pasi Savolainen    schedule 12.03.2012
comment
Я всегда выполнял запрос, чтобы получить последние выполненные запросы, какие-либо ссылки на руководство по использованию профилировщика для получения запроса? - person Neo; 12.03.2012
comment
Я всегда открывал его, запускал стандартную трассировку, выполнял программу до тех пор, пока не выполнялся запрос, а затем приостанавливал трассировку. Запрос обычно самый новый или один из них. - person Pasi Savolainen; 12.03.2012

Откройте Sql Server Profiler и отследите, что выполняется на вашем Sql-сервере. Ознакомьтесь с базовым руководством по использованию этого инструмента. .

person RePierre    schedule 12.03.2012
comment
вариант j, который он показывает в инструментах, отсутствует в управлении sql сервера 2005, а также не в моем 2010 году - person Neo; 12.03.2012
comment
Посмотрите на MSDN, как чтобы открыть его. - person RePierre; 12.03.2012

Вы можете преобразовать свой параметр следующим образом:

CONVERT(VARCHAR(19), @p_param, 120)

где 120 — код конвертации для гггг-мм-дд чч:ми:сс(24ч).

person Mathieu Leblanc    schedule 12.03.2012

Похоже, вы отправляете строковое значение. Это проблематично из-за изменения DateTime.Format в зависимости от культуры текущего потока.

Попробуйте что-то подобное при передаче параметров:

DateTime dateParam = GetDateParam();

_sqlCommand.Parameters.Add(
    new SqlParameter
    {
        DbType = DbType.Date,
        ParameterName = "@p_param",
        Value = dateParam 
    });
person David    schedule 12.03.2012

Я исправил это, я использовал ff в течение нескольких секунд, когда мне нужно было использовать ss

person Neo    schedule 12.03.2012
comment
кто когда-либо отмечал это как -1, пожалуйста, объясните, почему! Это была проблема, которая вызывала проблему только потому, что я в конце концов заметил ее › :( - person Neo; 13.03.2012
comment
Спасибо, Мартин, я думал, что у меня есть :S - person Neo; 05.04.2012
comment
@Dan, спасибо, что возродили старую ветку, которой 2 года, проблема заключалась в запросе, а не в том, как вывести параметризованный запрос, если вы хотите, попробуйте еще один поиск, поскольку здесь есть еще один вопрос с этим ответом. - person Neo; 18.03.2014
comment
@Neo Не моя вина, что ты задал неправильный вопрос. Я восстановил его, потому что это был результат поиска №1. Неважно, сколько лет вопросу, информация должна быть обновлена, чтобы быть правильной, или она должна быть удалена целиком. - person Dan Bechard; 19.03.2014
comment
@Dan понял, что в этом случае я добавлю код, который использую для обработки этого, в ответ. - person Neo; 20.03.2014