sql запрос

Alisher Yakhyarov
Дата: 02.04.2010 09:41:15
Доброго времени суток, подскажите как я могу использовать симовлы % в запросе like? Используя запрос показанный ниже возражается нужный результат,

sql = "SELECT [row1], [row2], [row3], [row4] FROM [Test_Db].[dbo].[messages] where row4 like @message_text";


Проблема в том, что используя символы % запрос возращается пустым,

sql = "SELECT [row1], [row2], [row3], [row4] FROM [Test_Db].[dbo].[messages] where row4 like @message_text%";

Вопрос : Как корректно написать этот запрос используя символы %?
МСУ
Дата: 02.04.2010 10:00:44
SqlCommand("SELECT * FROM Person.Contact WHERE FirstName LIKE @param", connection);
command.Parameters.AddWithValue("@param", "%Cry%");
prustr
Дата: 02.04.2010 10:25:41
sql = "SELECT [row1], [row2], [row3], [row4] FROM [Test_Db].[dbo].[messages] where row4 like '%" + message_text + "%'";

где message_text это ваша строковая переменная. Этот вариант приводится Вам для понимания того, что аргументом предложения like является строка, заключенная в одинарные ковычки.
ShSerge
Дата: 02.04.2010 10:33:20
prustr
sql = "SELECT [row1], [row2], [row3], [row4] FROM [Test_Db].[dbo].[messages] where row4 like '%" + message_text + "%'";

где message_text это ваша строковая переменная. Этот вариант приводится Вам для понимания того, что аргументом предложения like является строка, заключенная в одинарные ковычки.

Где переменная
message_text="%\nDROP DATABASE --"

2ТС. Используйте sp_executeSQL.
prustr
Дата: 02.04.2010 10:43:12
ShSerge

Где переменная
message_text="%\nDROP DATABASE --"

2ТС. Используйте sp_executeSQL.

Хороший вариант, только вы забыли одну одинарную ковычку добавить перед дроп.
я вот только не понял, вы что намекаете, что SqlCommand проводит валидацию параметров на предмет эксплойтов? Сейчас проверить не могу, но что то мало верю в это
МСУ
Дата: 02.04.2010 10:45:53
ShSerge
2ТС. Используйте sp_executeSQL.

Нафига?
ShSerge
Дата: 02.04.2010 10:57:05
МСУ
Нафига?

Вобщем, не надо. Только всё-таки лучше параметром передавать, а не конкатенацией, чтобы с инжекшином не заморачиваться.

2prustr. Так правильно?
message_text="%'\nDROP DATABASE --"
prustr
Дата: 02.04.2010 11:06:51
сейчас проверю, на 1С...
МСУ
Дата: 02.04.2010 11:12:00
ShSerge
Только всё-таки лучше параметром передавать, а не конкатенацией

Разумеется, о том и речь.
Alisher Yakhyarov
Дата: 02.04.2010 12:56:05
prustr,

хмм спасибо, то что надо