powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sequence
11 сообщений из 11, страница 1 из 1
sequence
    #33102559
-ant-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, как при вставке записи в БД ORACLE, вызвать для поля ID - sequence.nextval.
Запрос:
----------------------------------------------------
insert into tablename (id,name,nom,counter,year)
values (ND_SEQ_S.Nextval, 'Name 1',5,0,'05.06.2005')
----------------------------------------------------
Есть oledbdataadapter, dataset и datagrid.
InsertCommand
-----------------------------------------
INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR)
VALUES (ND_SEQ_S.NEXTVAL, ?, ?, ?, ?,)
------------------------------------------

При вставке предупреждает, что поле ID не может быть null. Как правильно написать?
...
Рейтинг: 0 / 0
sequence
    #33110097
Lyrene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У тебя после последнего знака вопроса в insert-команде запятая лишняя, но проблема не из-за этого, наверное.

В книжке Дэвида Сеппы написано именно так, как ты пытаешься сделать. У меня тоже это сделать не получается, но выдает другую ошибку:
ORA-02291: нарушено ограничение (PGR.R_5) целостности - исходный ключ
не найден.

Тоже пока не знаю, что делать..
...
Рейтинг: 0 / 0
sequence
    #33112417
forlog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант. Присваивать значение полю из sequence в триггере на таблице.
...
Рейтинг: 0 / 0
sequence
    #33116691
Фотография Andrew IF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SQL> create sequence nd_seq_s;

Последовательность создана.

SQL> create table tablename (id number, name varchar2( 10 ));

Таблица создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'+');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'-');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'=');

 1  строка создана.

SQL> commit;

Фиксация обновлений завершена.

SQL> select * from tablename;

        ID NAME           
---------- ---------- 
          1  +                
          2  -   
          3  =
...
Рейтинг: 0 / 0
sequence
    #33116694
Фотография Andrew IF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LyreneУ тебя после последнего знака вопроса в insert-команде запятая лишняя, но проблема не из-за этого, наверное.

В книжке Дэвида Сеппы написано именно так, как ты пытаешься сделать. У меня тоже это сделать не получается, но выдает другую ошибку:
ORA-02291: нарушено ограничение (PGR.R_5) целостности - исходный ключ
не найден.

Тоже пока не знаю, что делать..

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96525/e2100.htm

ORA-02291 integrity constraint (string.string) violated - parent key not foundCause: A foreign key value has no matching primary key value.Action: Delete the foreign key or add a matching primary key.
...
Рейтинг: 0 / 0
sequence
    #33119246
-ant-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew IF
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SQL> create sequence nd_seq_s;

Последовательность создана.

SQL> create table tablename (id number, name varchar2( 10 ));

Таблица создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'+');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'-');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'=');

 1  строка создана.

SQL> commit;

Фиксация обновлений завершена.

SQL> select * from tablename;

        ID NAME           
---------- ---------- 
          1  +                
          2  -   
          3  =

--------------------------------------------
Кхе... вопрос не об этом.

Ошибка в передаче параметра - что-то вроде "Parametr[0] 'ID' has no default value".

Пробовал юзать ХП, но почему то она не видна в DataAdapter.
...
Рейтинг: 0 / 0
sequence
    #33119509
Lyrene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
...
Рейтинг: 0 / 0
sequence
    #33119510
Lyrene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
...
Рейтинг: 0 / 0
sequence
    #33119620
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше сиквенс отдельным запросом получать


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
sequence
    #33121713
-ant-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LyreneА если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
-----------------------------------------------------
Такая мысль меня посещала. Надо попробовать.
Хотя хотелось бы без выкрутасов. Есть компонент, значит должен работать.
Кроме того, при вызове сиквенса дополнительной командой, возможна потеря значения при неудавшемся инсерте.
...
Рейтинг: 0 / 0
sequence
    #33123252
Фотография Andrew IF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-ant-
Кроме того, при вызове сиквенса дополнительной командой, возможна потеря значения при неудавшемся инсерте.

А вам его жалко? Ну потеряется значение. Это же не ресурс какой-то. А для вставки в родительскую таблицу с последующей вставкой в дочерние, вообще, оптимальный вариант.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sequence
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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