powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / выполнить команду с параметрами
9 сообщений из 9, страница 1 из 1
выполнить команду с параметрами
    #32519988
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел примеры, написал свой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
OleDbConnection myConn = new OleDbConnection(m_connectionString);
OleDbCommand myCommand = new OleDbCommand();

myCommand.Connection = myConn;
myCommand.CommandText = "insert into orders(price, deadline, description) values(@price, @deadline, @description)";

myAdapter.InsertCommand = myCommand;
myCommand.Parameters.Add(new OleDbParameter("@price",OleDbType.Currency));
myCommand.Parameters.Add(new OleDbParameter("@deadline",OleDbType.Date));
myCommand.Parameters.Add(new OleDbParameter("@desciption",OleDbType.Binary));
			
myConn.Open();
myCommand.ExecuteNonQuery();
ругаеться что параметр "@price" должен быть объявлен.
что не так?
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520000
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну во первых надо писать как именно ругается.

А во вторых у вас у всех параметров отсутствуют значения. И не только у price.
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520097
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код я написал что бы общую идею показать, значения намеренно не указал, посчитал что нулл это тоже значение. Но для чистоты эксперимента можно использовать вот такой вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
OleDbConnection myConn = new OleDbConnection(m_connectionString);
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = myConn;
myCommand.CommandText = "insert into orders(price, deadline, description) values(@price, @deadline, @description)";

myCommand.Parameters.Add(new OleDbParameter("@price",OleDbType.Currency));
myCommand.Parameters.Add(new OleDbParameter("@deadline",OleDbType.Date));
myCommand.Parameters.Add(new OleDbParameter("@desciption",OleDbType.VarChar, 6000 ));
			
myCommand.Parameters["@price"].Value =  15 . 5 ;
myCommand.Parameters["@deadline"].Value = "01.01.01";
myCommand.Parameters["@desciption"].Value = "dfdfd";
			
myConn.Open();
myCommand.ExecuteNonQuery();
Ошибка:
Must declare the variable '@price'.

Кстати попутно хочется выяснить, поле description имеет тип text. Я воспользовался OleDbType.VarChar, а что подходит в этом случае больше всего?
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520140
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>поле description имеет тип text. Я воспользовался OleDbType.VarChar, а что подходит в этом случае больше всего?

МДля MS SQL больше всего подходит System.Data.SqlDbType.Text

>must declare the variable
Попробуйте @price везде поменять например на @p2, ошибка останется?
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520217
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп. Дак вы же используете OleDBProvider а не SQLProvider ну тогда и делайте через знаки вопросов:
Код: plaintext
1.
myCommand.CommandText = "insert into orders(price, deadline, description) values(?, ?, ?)";

Из - за этого и все проблемы.
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520228
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самостоятельно поразмыслив я решил прблему. Рассудил, что
ошибка Must declare the variable '@price' это скулевская ошибка, что закономерно, в запросе

Код: plaintext
insert into orders(price, deadline, description) values(@price, @deadline, @description) 

не объявлены @price, @deadline, @description.
Очевидно значек @ в запросе не говорит ADO.NET о том, что это параметр. Пишу

Код: plaintext
insert into orders(price, deadline, description) values(?, ?, ?) 

и все встает на свои места, запрос работает.

Еще вопрос, хотя я работаю с скл сервер 2000, я решил использовать ОлеДб объекты, как более универсальные. Набью руку, будет легче с аксесом и другими источниками работать. Но может я не прав?
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520244
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ

Все таки что бы вы мне рекомендовали использовать?
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520317
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО: Для MS SQL однозначно использовать SQLProvider + stored procedure
Вместо Access - MSDE и тоже SQL Provider + stored procedure :-)

Что касается этой проблемы, дело в том что MS SQL заточен под использование именованных параметров, тогда как универсальный OLEDB нет и в конечном счете ему, при использовании MS SQL ( требование MS SQL - это именованные параметры) приходитсь еще и parsить SQLText, подставляя вместо "?" - именнованные параметры. Вывод - за универсальность приходиться платить.
...
Рейтинг: 0 / 0
выполнить команду с параметрами
    #32520332
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю уже понятно, что при использовании SQLProvider здесь ошибок не будет:
Код: plaintext
1.
myCommand.CommandText = "insert into orders(price, deadline, description) values(@price, @deadline, @description)";
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / выполнить команду с параметрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]