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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SqlCommand INSERT и INTO.... А как узнать то какой ID у записи то 
V
    Опции темы
Pankon
Дата 11.7.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создаю запись с помощью SqlConnection, SqlCommand, SQL = "INSERT INTO...."
А как узнать то какой ID у записи то  smile  ? 
PM MAIL   Вверх
Дрон
Дата 11.7.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Легко smile

Код

INSERT INTO ....; SELECT SCOPE_IDENTITY()

Ну и дальше вызывай ExecuteScalar() для твоего SqlCommand. 


--------------------
Да. Именно так.
PM   Вверх
Ignat
Дата 11.7.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Дрон, а это для какой БД? 


--------------------
Теперь при чем :P
PM   Вверх
DemoCode
Дата 11.7.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какая БД?

Можно так:
Код

SELECT MAX(ID) AS MAXID FROM YOURTABLE
 


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Ignat
Дата 11.7.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(DemoCode @  11.7.2006,  18:53 Найти цитируемый пост)
Можно так:

Так нельзя. Не факт, что максимальный ИД будет последним. 


--------------------
Теперь при чем :P
PM   Вверх
Pankon
Дата 11.7.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дрон, спасибо за подсказку..

Прочитал про ExecuteScalar.

Осталось не понятным SELECT SCOPE_IDENTITY(). Это для чего?(Что это?) 
PM MAIL   Вверх
DemoCode
Дата 11.7.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ignat @  11.7.2006,  18:57 Найти цитируемый пост)
Так нельзя. Не факт, что максимальный ИД будет последним.  

Чаще всего записи добавляются с ID равным NULL, поэтому максимальный ID будет последним.
Но если известно, что в приложении записи добавляются с ID отличным от NULL, тогда да нельзя, а если нет - то этот способо будет универсальным для любой БД. 


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Дрон
Дата 11.7.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Цитата(Pankon @  11.7.2006,  19:01 Найти цитируемый пост)
Осталось не понятным SELECT SCOPE_IDENTITY().

Пользуемся поиском smile
http://forum.vingrad.ru/index.php?showtopic=96271
А в двух словах именно этим запросом мы и получаем последний сгенерированный ID-шник smile
ExecuteScalar нужен только для того, чтобы иметь возможность вернуть его тебе. Обычно ведь INSERT выполняется методом ExecuteNonQuery.
Можно, конечно, ещё возвращать через output параметр и часто так и приходится делать, но в простом случае сойдёт и ExecuteScalar.

Цитата(Ignat @  11.7.2006,  18:51 Найти цитируемый пост)
Дрон, а это для какой БД?  

Поскльку вопрос про SqlCommand -- то и сервер будет MS SQL Server smile
  

Это сообщение отредактировал(а) Дрон - 11.7.2006, 18:17


--------------------
Да. Именно так.
PM   Вверх
Softaz
Дата 13.7.2006, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Цитата(Дрон @  11.7.2006,  18:09 Найти цитируемый пост)
Поскльку вопрос про SqlCommand -- то и сервер будет MS SQL Server 

Если применяешь MSSQL лучше в качестве ID-шника брать тип UNIQUEIDENTIFIER. Имхо удобней.
А там и хранимку написать не проблема.
Код

--...
DECLARE @guid uniqueidentifier
SET @guid = NewID()
--...
INSERT INTO VALUES (@guid, @param)
SELECT @guid
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Дрон
Дата 13.7.2006, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Softaz, да ну?!?! Где ты такое нашёл?

Во-первых, если это будет Primary Key, то при каждом инсерте будет переколбашиваться вся таблица, т.к. новый гуид не обязательно больше предыдущего.
Во-вторых, guid занимает больше места в памяти и его сравнение сложнее, следовательно join с такой таблицей будет работать медленее.
В-третьих, зачем изобретать велосипед, если есть нормальные identity поля и нормальная функция SCOPE_IDENTITY()?
  

Это сообщение отредактировал(а) Дрон - 13.7.2006, 08:47


--------------------
Да. Именно так.
PM   Вверх
Softaz
Дата 13.7.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Цитата(Дрон @  13.7.2006,  08:46 Найти цитируемый пост)
т.к. новый гуид не обязательно больше предыдущего.

Обходится быстро и легко.

Цитата(Дрон @  13.7.2006,  08:46 Найти цитируемый пост)
guid занимает больше места в памяти 

Индекс строится по ключевому полю, т.е. по Guid, а он длиннее. Следовательно, ДПС будет больше работать. Память здесь ни при чем.

Цитата(Дрон @  13.7.2006,  08:46 Найти цитируемый пост)
следовательно join с такой таблицей будет работать медленее.

Ага. Только заметно это будет где-то с миллиона записей. А если идет выборка из 20 таблиц с 10 млрд. строк из пары БД. Бедный int smile (загнул, конечно, но смысл ясен)

Цитата(Дрон @  13.7.2006,  08:46 Найти цитируемый пост)
зачем изобретать велосипед

Он изобретен M$, значит, оным не является. Все же уникальность в 2^64 неплохая. И в DataSet можно спокойно его записать, не боясь, что на сервере уже есть такой и возникнет исключение.
И синхронизация с репликацией проще.
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Дрон
Дата 13.7.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Цитата(Softaz @  13.7.2006,  15:10 Найти цитируемый пост)
И синхронизация с репликацией проще

С этим согласен. Ну, и естественно 32-битного int на долго тоже не хватит smile
Но использование гуида для обычных таблиц -- это, на мой взгляд, редкостное извращение.
 


--------------------
Да. Именно так.
PM   Вверх
Softaz
Дата 13.7.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Цитата(Дрон @  13.7.2006,  14:51 Найти цитируемый пост)
Но использование гуида для обычных таблиц -- это, на мой взгляд, редкостное извращение

Да. Для хранения настроек программы типа "последние файлы" - это очень редкостное извращение smile  


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Pankon
Дата 14.7.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем спасибо. 
PM MAIL   Вверх
starostin
Дата 4.11.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.9.2009
Где: Ярославль

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



а как быть если субд firebird?
PM MAIL ICQ Skype GTalk Jabber MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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