|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Добрый день! У меня была проблема со вставкой некоторых символов в БД через SQL запрос: например: INSERT INTO T (Name) VALUES ('3Ø 380V') в таблице будет значение: 3O 380V т.е. заменяет знак Ø на O. На ветке форума Microsoft SQL Server мне посоветовали: "Приложение должно передавать данные только через параметры INSERT dbo.MyTable (Name) VALUES (@Name) И в приложении задать парметр @Name (SqlParameter)" А в каком месте задавать и присваивать параметры? У меня в общем виде переменная вставляется в цикле: Dim conn As Object = CreateObject("ADODB.Connection") conn.Open("Provider=SQLOLEDB;" + ConnectionString) ... Dim Ins_Name as String Do While... Ins_Name="3Ø 380V" ... StrSQL = "INSERT INTO T (Name) Values ('"+Ins_Name+"')" conn.Execute(StrSQL) Loop Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 17:16 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Lexx_SQL, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 17:26 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Lexx_SQL, обратите внимание! VIT2708 Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 17:42 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Cat2Lexx_SQL, обратите внимание! VIT2708 Код: c# 1.
Это кусок моего рабочего кода. А что не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 17:46 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
VIT2708Cat2Lexx_SQL, обратите внимание! пропущено... Это кусок моего рабочего кода. А что не так? Как раз все правильно, если надо использовать всякие символы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 18:48 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
VIT2708 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Метод Add() помечен как obsolete. Лучше использовать AddWithValue(). Не понял зачем ты два раза параметры создаешь. Это просто для примера? VIT2708 Код: c# 1. 2.
Явно лишняя операция. using() это сделает и так. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 19:21 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Lexx_SQL, непонятно почему ты используешь COM объекты в ADO, а не родные классы из System.Data.SqlClient. Также удивляет что ты делаешь запросы к БД в цикле. Постарайся объединить их в единый батч для улучшения производительности. Пример с параметрами тебе уже привели. Еще один аргумент в их пользу это защита от SQL Injection атак. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 19:24 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazileПостарайся объединить их в единый батч для улучшения производительности. Вдогонку. Пример релизации пакетного выполнения с помощью SqlCommand - http://stackoverflow.com/a/6409182 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 19:34 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazilebazileПостарайся объединить их в единый батч для улучшения производительности. Вдогонку. Пример релизации пакетного выполнения с помощью SqlCommand - http://stackoverflow.com/a/6409182 Два примера быдлокода. В первом нет транзакции, во втором- три временные таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:09 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Cat2Два примера быдлокода. В первом нет транзакции, во втором- три временные таблицы В коде ТС транзакции тоже нет. При необходимости добавить ее не составит проблемы. Второй пример я даже не смотрел. Рекомендация касается только первого примера. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:18 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazileВ коде ТС транзакции тоже нет Единичный запрос и так в транзакции выполняется ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 07:51 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazileVIT2708 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Метод Add() помечен как obsolete. Лучше использовать AddWithValue(). Не понял зачем ты два раза параметры создаешь. Это просто для примера? VIT2708 Код: c# 1. 2.
Явно лишняя операция. using() это сделает и так. Это просто примеры!!!!!! дальше кому как нравится ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 12:53 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazileЯвно лишняя операция. using() это сделает и так. Что за мода везде using пихать? Зачем он нужен в данном случае? Закрыть коннект? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 18:23 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Cat2Что за мода везде using пихать? Не знаю, я за модой как-то не слежу. Cat2Зачем он нужен в данном случае? Закрыть коннект? Закрыть соединение и вернуть его в пул. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 19:50 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazileCat2Что за мода везде using пихать? Не знаю, я за модой как-то не слежу. Cat2Зачем он нужен в данном случае? Закрыть коннект? Закрыть соединение и вернуть его в пул. Это сделается и после connection.Close() Смысл Using в данном случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 21:20 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Cat2, при использовании using компилятор также сгенерирует try/finally блок чтобы гарантировать (есть исключение, см. ниже) вызов IDisposable.Dispose() даже в случае исключения. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Разумеется это можно и самому написать, но чаще всего запись с using будет короче. Также следует помнить что использование object initializer-ов может совместно с using() { } может привести к не-исполнению IDisposable.Dispose(), если setter может возбудить исключение. В таком случае нужно, например, перенести инициализацию полей внутрь using() {}. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:57 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
bazile, Я это все знаю Я никого и ни в чем не обвиняю, мне просто хочется разобраться. В данном конкретном случае (см.пример в топике) using освобождает память от коннекта. А зачем? Что, он много памяти занимает? После этого каждый раз при обращении к базе нужно заново создавать коннект. Смысл? Я предпочитаю иметь один коннект на все приложение. Даже если его закрыть, то потом он быстрее из пула вибирается. Хотя про быстрее - спорно. Не очень большой я в этом специалист. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 18:38 |
|
Вставлять данные в SQL помощью через параметры
|
|||
---|---|---|---|
#18+
Cat2Я это все знаю ... using освобождает память от коннекта. А зачем? Что, он много памяти занимает? Плохо знаешь раз считаешь, что using освобождает память. Предназначение using это вызов IDisposable.Dispose(). Освобождает память только сборщик мусора. Соединение с БД это не только участок памяти под объект, но и системные объекты ОС для сокетов, TCP/IP (или другое) соединение, служебные данные на стороне БД и т.п.. Идея в том что соединение с БД (имея в виду сетевую СУБД) является ценным разделяемым ресурсом нужное многим. Соединений с БД можно создать ограниченное кол-во. Поэтому правилом хорошего тона считается использование соединения с БД (и других подобных ресурсов) как можно более короткими интервалами (Acquire Late, Release Early). Cat2После этого каждый раз при обращении к базе нужно заново создавать коннект. Смысл? Улучшение масштабируемости приложения. Выделение памяти в .NET является дешевой операцией. Кроме того при использовании пула соединений мы тратим время только на создание нового объекта SqlConnection, но не на установление соединения с БД (что является потенциально медленной операцией). Cat2Я предпочитаю иметь один коннект на все приложение. Даже если его закрыть, то потом он быстрее из пула вибирается. Хотя про быстрее - спорно. Не очень большой я в этом специалист. Да пожалуйста. Разные ситуации требуют разных решений. В случае desktop приложений единый коннект с БД имеет право на существование, а в случае веб это порочная практика. Главное выбирать решение не потому, что "мне кажется что так будет лучше", а проверить и убедиться, что это в самом деле так. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 19:16 |
|
|
start [/forum/topic.php?fid=20&fpage=191&tid=1405789]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 327ms |
total: | 468ms |
0 / 0 |