Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataColumn.AutoIncrement не фунциклирует? 
:(
    Опции темы
ExSoft
Дата 28.1.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 29.6.2008

Репутация: нет
Всего: 1



Дрозофила:
Код

create procedure sp_Select_NULL
   @IsSelectNull bit=0
as
begin
   create table #tmpTable(
     Id int null,
     Name varchar(256) null)

   insert into #tmpTable (Name) values ('Иванов Иван Иванович')
   insert into #tmpTable (Name) values ('Петров Петр Петрович')
   insert into #tmpTable (Name) values ('Сидоров Сидор Сидорович')
   insert into #tmpTable (Name) values ('Александров Александр Александрович')

   if @IsSelectNull=1
     select Id, Name from #tmpTable
   else
     select Name from #tmpTable

   drop table #tmpTable
end
go

Код

tmpDataTable=new DataTable();
tmpDataColumn=tmpDataTable.Columns.Add("Id",typeof(int));
tmpDataColumn.AllowDBNull=false;
tmpDataColumn.Unique=true;
tmpDataColumn.AutoIncrement=true;
tmpDataColumn.AutoIncrementSeed=1;
tmpDataColumn.AutoIncrementStep=1;
tmpDataTable.PrimaryKey=new DataColumn[]{tmpDataTable.Columns["Id"]};

da=new OleDbDataAdapter("{call sp_Select_NULL}",cn);
da.Fill(tmpDataTable); // 1

tmpDataTable.Clear();
da.SelectCommand.CommandText="{call sp_Select_NULL(?)}";
da.SelectCommand.Parameters.Add("IsSelectNull",OleDbType.Boolean).Value=true;
da.Fill(tmpDataTable); // 2


Первый DataAdapter.Fill (когда SP возвращает только Name) - отрабатывает как в букварике написано: т.е. Id инициализируется и инкрементируется. А, вот, второй раз (когда SP возвращает и Id (NULL), и Name) имеем:
Цитата("System.Data.ConstraintException")

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

Это так надо? Т.е. если что-нибудь (пусть даже NULL) возвращается в резалтсете, то весь механизм DataColumn.AutoIncrement'а преспокойно курит в сторонке? Или, все же, это както можно растолкать? Конечно, я понимаю, что, в случае, когда часть записей имеет Id, а часть - нЭт, получаем: "...здесь - играем, здесь - не играем, а здесь - рыбу заворачивали..." со всеми вытекающими. Но все же?

P.S. Проверил на FW1.1+NDP1.1sp1-KB887549-X86 && FW2.0
PM MAIL   Вверх
Лен
Дата 29.1.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



Хм, вообще-то про автоинкремент ты в запросе ничего не сказал. Id у тебя при таких insert-ах всегда будет null, а те числа , которые ты видел - не Id, а скорее всего автонумерации строк. Читобы сделать автоинкремент, замени 
Код

create table #tmpTable(
     Id int null,
     Name varchar(256) null)
 на 
Код

create table #tmpTable(
     Id int identity (0, 1),
     Name varchar(256) null)


После этого сможешь выполнять добавление строк в виде 
Код

insert into #tmpTable values ('Иванов Иван Иванович')
 - так короче )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.