![]() |
|
Модераторы: gambit |
![]()
|
|
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Передо мной встал вопрос - как добраться до последней записи в таблице? Я порылся в методах DataTable и DataRow но ничего подобного MoveEnd ненашёл.
Добавлено @ 12:58 Я воопще к чему эту тему завёл: надо строку вставить, ру и соответственно у неё первое поле ключевое. Так мне надо перед вставкой строки записать туда значение на единицу больше значения ключевого поля последней строки, а як до него добраться я ненаю! |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 5 Всего: 93 |
kaa
В любом случае вручную это делать не хорошо. У DataColumn есть свойства AutoIncrement, AutoIncrementSeed, AutoIncrementStep -- поставь их такими же как и в твоей базе данных и будет тебе счастье. ЗЫ: Такого понятия как "последняя запись в таблице" не существует. Какая из них будет последней зависит от выбранной сортировки. -------------------- Да. Именно так. |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Дрон
Тогда позвольте спрошу немного подругому: как определить наибольшее значение ключа в таблице (ключ - число). Ведь помоему запрос SQL не анализирует ключевое поле? Добавлено @ 14:43 Дрон А еще не подскажете гже поподробнее можно узнать о свойствах и методах DtaGrid |
|||
|
||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 5 Всего: 93 |
kaa
Я же сказал, что вручную этим заниматься категорически не стоит. Самое большое значение ключа не всегда последнее, т.к. последние добавленные записи могли быть удалены. А вообще, если есть DataTable, то можно написать так:
НО ТАК ДЕЛАТЬ НЕ СТОИТ!!!
Не совсем понятно, о чём речь.
MSDN -- http://msdn.microsoft.com Это сообщение отредактировал(а) Дрон - 2.1.2006, 21:48 -------------------- Да. Именно так. |
||||||
|
|||||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Наверное нада сказать откуда ноги растут... Я хачу реализовать в своей пробной, так сказать программе, возможность добавления записей. Так прежде чем новая запись будет добавлена в объект DataTable нужно всем полям присвоить требуемые значения. В таблице присутствует ключевое поле. Ключ - число ( тип int). Соответственно мне нужно записать новое значение ключа. Разумно будет предположить што оно должно быть на единицу больше наибольшего из ключей (они у меня в таблице идут по порядку с возрастанием значения). Перефразирую вопрос: как мне найти максимальное значение ключевого поля чтобы потом на его основе вычислять значение новго ключа Добавлено @ 00:08 И еще одна мысль прибежала: а если мы вставляем строку в таблицу, у которой клучевое поле со свойством автоинкремента, то тоже надо значение ключа забивать или ключь вычислится автоматически? Добавлено @ 00:10 ЗЫ: Помоему название темы должно быть другим... Его нельзя поменять??? |
|||
|
||||
| -ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
ключЪ вычислится автоматически, тебе о нем беспокоиться не стоит, сервер сам помнит какой будет следующий. и как уже упомянул Дрон: Самое большое значение ключа не всегда последнее, т.к. последние добавленные записи могли быть удалены. т.е. если ты удалил последнюю строку в таблице с номером ключа 100, а затем добавляешь новую, то новый ключ все равно будет например 101, а никак не 100, в противном случае ты представляешь к каким результатам может привести создание новой строки с тем же ключом, что уже когда-то существовала. -------------------- "Тонкая, однако, работа." |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
-ser-
O! ЧИЛОВЕК! ПАСИБА ТЕ! РАЗЪЯСТНИЛ |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
З.Ы. если ещё надо, чтобы заполнялись любые поля (не только ключевое), можно выставить у колонок (DataColumn) св-во DefaultValue.
-------------------- ![]() |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
mr.DUDA
Как понять заполнялись? Сами собой что-ли? |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
-ser-
То ли я тормоз, то ли я чего не понимаю, но у меня идут траблы с ключевым полем при вставке новой строки! Кстати, я пытаюсь её добавить в локальный объёкт DataTble, а не запросом на сервер.... Та кне делают? В общем код такой: private void Create_Click(object sender, System.EventArgs e) { DataRow row = ds.Tables["trunk"].NewRow(); row["KEY"]=null; row["NUMMASCH"]=10000; row["NUMTRUNK"]="NuNuCa Nuss-Nougat-Creme"; row["MARK"]=10000; row["SER_NUM"]=10000; ds.Tables["trunk"].Rows.Add(row); } Так у меня вылазит исключение - типа в ключевом поле запрещено значение NULL. Когда ремарю строку row["KEY"]=null; Все работает, но в ключевом поле появляется значение NULL. В базе данных у меня поле KEY имеет свойство счетчик. Когда я загружаю таблицу в структуру DataSet это свойство сохраняется или нет? Почему при добавлении строки у меня не происходит автоматического изменения значения поля KEY ЗЫ: я еще только начинаю учиться кодить на C#, но меня уже задолбал данный трабл - грёбанную строку в таблицу впихнуть невозможно Это сообщение отредактировал(а) kaa - 3.1.2006, 14:59 |
|||
|
||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 5 Всего: 93 |
kaa
Когда приводишь исходники, выделяй их кнопкой Код. И вообще старайся, по-меньше использовать красный цвет
По-моему, нет. Ты должен после загрузки данных сам написать:
Тогда всё будет нормально. А при создании новой строки вообще поле KEY не трогай. А кстати, как ты обновляешь БД? Через DataAdapter или вручную?
А C# тут совсем не причём Это сообщение отредактировал(а) Дрон - 3.1.2006, 15:23 -------------------- Да. Именно так. |
||||||
|
|||||||
| Exception |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
Точно. Скорее причем
На будущее: для этого необходимо в гугле набрать имякласса members. http://msdn.microsoft.com/library/default....emberstopic.asp |
||||||
|
|||||||
| kaa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Да я уже... Типа вчера битый час хреначил странички с сайта мелкомягкого в Word ЗЫ: ПАРДОН ЗА ОФТОП Добавлено @ 21:59 Дрон
А вот до этого я еще не дошёл... Предполагаю через DataAdapter, а что? |
||||
|
|||||
| kaa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Дрон
Фигу! У меня в таблице уже есть значение поля KEY=1, так эта гадость такое же значение ставит не стесняясь
Вылезает трабл в виде исключения - типа усё! Типа такое значение (1) уже есть! И какое же начальное значение мне задавать? Да что за хрень-то, а?????????????????????????????????? |
||||
|
|||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 5 Всего: 93 |
kaa
Пожалуйста меньше эмоций, мы же серьёзные люди Если руки растут не совсем оттуда, то зачем же ругаться на такую удобнейшую систему как .NET. Что ж. Теперь попробую объяснить тот подход, который использую я. Во-первых, я был не совсем прав насчёт того, что значения автоинкремента надо ставить такими же как и базе. Но об этом позже. А для начала рассмотрим как раз финальный этап -- обновление БД. Я думаю, что большинство БД (ты вроде используешь Access?) не дадут вручную записать произвольное значение в поле с автоинкрементом. Тем самым и тебе в твоей программе в простейшем случае вообще не надо трогать это поле. При добавлении новых записей в таблицу сама БД будет генерировать нужные значения. В более сложном случае общим подходом (вроде рекомендованным майкрософт) является установка значения AutoIncrementSeed = -1, AutoIncrementStep = -1. Тогда те поля, которые добавлены в таблицу, но ещё не сохранены в БД будут иметь ОТРИЦАТЕЛЬНЫЕ ключи, которые не пересекутся с уже существующими. А когда ты будешь обновлять через DataAdapter -- он заменит их на реальные, которые сгенерирует база данных (при работе вручную тебе нужно будет вручную их обновлять -- и это для Access немного напряжно). Нужно ещё учесть, что если у тебя не одна таблица, а несколько и при этом у тебя есть связь, использующая значения этого ключа, то нужно всё правильно настроить и обновлять таблицы в правильном порядке, чтобы ссылки на эти отрицательные ключи обновились во всех таблицах. Если что-то не ясно, то могу попробовать объяснить подробнее и с примерами. -------------------- Да. Именно так. |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Дрон
Пасибо! Вроде пока всё всасал, к тому же книженцую поштудировал по ADO.NET, ща буду с обновлениями маятся - как, чё... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Да, сами собой. Это при условии, что строка создаётся либо юзером в GridView, либо тобой с пом. DataTable.NewRow() -------------------- ![]() |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Дрон
Товарисч! Я сегодня весь день читал книжецу ADO.NET любезно выложенную кем-то на ентом форуме. Почитал-почитал и решил таки пойти к Вам за советом. Оказывается код обновления нужно ваять самому... Меня это сильно покоробило. В книге есть пример, но там навалена куча кода и некоторых маментов я никак не пойму... Можно пару примерчиков с объяснениями,а? Добавлено @ 22:57 Или на крайняк ссылочку на какую-нить литературку по данному вопросу... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |