![]() |
Динамический SQL запрос
Подскажите пожалуйста, как в запросе типа:
string myInsertQuery = "INSERT INTO tablename (column1,column2) VALUES (100,200); вместо VALUES использовать переменные. |
Ответ: Динамический SQL запрос
saena, может так:
string myInsertQuery = "INSERT INTO tablename (column1,column2) VALUES (" + i + "," + j + ")"; |
Ответ: Динамический SQL запрос
Вариант, но у меня одна запись содержит 64 значения, имена переменных очень длиные, очень легко потеряться.
|
Ответ: Динамический SQL запрос
Цитата:
|
Ответ: Динамический SQL запрос
а пример можно или ссылку на пример, а то не совсем понял как записать в цикле в запрос.
|
Ответ: Динамический SQL запрос
Цитата:
Код:
insQuery = "INSERT INTO tablename (column1,column2) VALUES ("; |
Ответ: Динамический SQL запрос
Не рекомендую в прогах использовать SQL запросы в виде строки и еще и формировать ее в рантайм. Обычно и чаще всего это считается требованием использовать хранимые процедуры, во-первых это быстрее, во-вторых безопаснее, в-третьих правельнее.
|
Ответ: Динамический SQL запрос
Уважаемый Forger, хранимые процедуры "почти всегда" быстрее, бывают исключения. Их использование правильнее только с академической точки зрения. При возникновения необходимости как-то обобщить однотипные операции хранимая процедура не самый лучший вариант. Скажем нужно выполнять похожие операции с 50 различными данными в разных таблицах и с разными названиями. Писать 50 различных хранимых процедур, выполняющих одно и тоже?
А вопросы безопасности легко снимаются использованием адаптеров и передачи значений через их параметры. Главное не допускать прямого попадания текста введенного пользователем в строку запроса. saena, последнее может помочь тебе с передачей значений. |
Ответ: Динамический SQL запрос
RaidenYN, не могли бы вы показать пример, как передать через параметры.
|
Ответ: Динамический SQL запрос
У SqlCommand есть коллекция параметров. Допустим, у вас уже создано и открыто соединение с базой данных sqlConnection. Создадим запрос:
SqlCommand Command = new SqlCommand(“INSERT INTO Table(Column1, Column2) VALUES @Value1, @Value2”, sqlConnection); Теперь создадем параметры: SqlParameter Parameter = Command.Parameters.Add(new SqlParameter(ParameterName, Value)); Тут: ParamName - строковое имя, начинающаяся с собачки. Например - "@Value1". Value - Значение переменной, в вашем случае равное 100. После этого вызываете: Command.ExecuteNonQuery(); Если значений много можно воспользоваться таким приемом (значения лежат в массиве Value[]): Код:
//Cоздаем запрос |
Ответ: Динамический SQL запрос
При помощи http://bltoolkit.com/ можно динамически создавать запросы используя классы как контейнеры переменных.
|
Ответ: Динамический SQL запрос
либо параметры, либо просто подстановкой значений 'VALUES'+Var1.TOString() etc
|
Ответ: Динамический SQL запрос
4RaidenYN
Но при таком подходе легко нарваться на SQL injection. Так что я бы все таки работал только через коллекцию Parameters. Динамический SQL это зло. |
Ответ: Динамический SQL запрос
Лучше работать с параметрами запроса - получается управляемая безопасная модель.
Добавлено через 5 минут Лучше работать с параметрами запроса - получается управляемая безопасная модель. |
SQL запрос. Запутался с синтаксисом
Ребята, помогите, а то уже три клавы раздолбал, как тут:
http://www.youtube.com/watch?v=kKT_09pARN4 :) Есть запросик, который сканирует папку с бакапами главной базы, выдергивает самый свежий архив и восстанавливает его в резервную базу в которой люди стряпают отчеты и занимаются другой чепухой, не мешая грести флагманскому авианосцу. --[начало запроса]-- declare @lvFile table ( stValue varchar(100) ,i int identity(1,1) ) declare @fullPath varchar(500) = 'dir e:\SQL\BACKUP\*.bak /o:d /t:w /b' ,@sSQL nvarchar(max) insert into @lvFile exec xp_cmdshell @fullPath --если тупо пишем полное имя файла, то все работает: select top 1 @sSQL = 'RESTORE DATABASE Base2 FROM DISK = N''E:\SQL\BACKUP\base1.bak''' from @lvFile where stValue is not null order by i desc exec sp_executesql @stmt = @sSQL --[конец запроса]-- Так вот, никак не удается подсунуть переменную stValue вместо имени файла (в нашем случае это base1.bak) Иными словами, как правильно символьные кавычки расставить тут: select top 1 @sSQL = 'RESTORE DATABASE Base2 FROM DISK = N''e:\SQL\BACKUP\' + stValue Спасибо. |
| Текущее время: 00:20. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2025 NoWa.cc