powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet + priamary key из sequence ?
14 сообщений из 14, страница 1 из 1
DataSet + priamary key из sequence ?
    #33845288
krot-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал задать этот вопрос в разделе С#. Так никто и не ответил. Может тут кто поможет. Выкладываю сразу все посты:

как сделать так, чтобы при добавлении новой строки в DataGrid primary key автоматически генерировался? И чтобы он в DataGrid вообще не показывался?

Заполение грида:
productsAdapter = new OracleDataAdapter("select id, name from test", conn);
productsCmdBuilder = new OracleCommandBuilder(productsAdapter);
productsDataSet = new DataSet("productsDataSet");
productsAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
productsAdapter.Fill(productsDataSet, "menu");
dataGridView1.DataSource = productsDataSet.Tables["menu"];

Генерирование id:
cmd = new OracleCommand();
cmd.CommandText = "select seq.nextval from dual";
cmd.Connection = conn;
reader = cmd.ExecuteReader();
reader.Read();
int id = (int)reader.GetDecimal(0);

Подскажите, как это сделать автоматически?
И как не показывать id в гриде? Если ставить признак колонки Visible = false, то невозможно добавить новую строку...


Вот как я пока решил проблему с primary key:
Надо было все лишь добавить свой запрос в InsertCommand
вот код:
OracleCommand inscmd = new OracleCommand("insert into test (id, name) values (seq.nextval, :NAME)", conn);
inscmd.Parameters.Add(":NAME", OracleDbType.Varchar2, 14, "NAME");
productsAdapter.InsertCommand = inscmd;


Попутно встал следующий вопрос:
предположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц,
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33845877
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вы поиском пробовали пользоваться, прежде чем плодить свои топики по всем форумам?
по поводу автоинкрементных полей
http://www.sql.ru/forum/actualthread.aspx?tid=161265
http://www.sql.ru/forum/actualthread.aspx?tid=271022
по поводу невидимости колонки в гриде (если это DataGrid а не DataGridView) - ищите по слову TableStyle
еще в MSDN рекомендую заглянуть
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33845971
Sergey S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял:
датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел
согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру.
за последний вариант не уверен, не помню где это я видел.
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33845990
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sпо поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял:
датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел
согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру.
за последний вариант не уверен, не помню где это я видел.
?!
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33846058
krot-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sпо поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял:
датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел
согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру.
за последний вариант не уверен, не помню где это я видел.

Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится?
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33846170
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krot-s
Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится?
чего вдруг?!
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33846181
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 krot-s
(по поводу 2 krot-sпредположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц)
вы имеете в виду у вас источником для грида служит DataSet с 2-мя и больше таблиц(DataTable)?
если это так - то зачем два DataSet-а?
или вы имели в виду что датасет у вас заполняется запросом select ...
from table1 join table2 и вам нужно изменить table1 & table2?
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33847741
krot-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!2 krot-s
(по поводу 2 krot-sпредположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц)
вы имеете в виду у вас источником для грида служит DataSet с 2-мя и больше таблиц(DataTable)?
если это так - то зачем два DataSet-а?
или вы имели в виду что датасет у вас заполняется запросом select ...
from table1 join table2 и вам нужно изменить table1 & table2?

Именно второй случай. select t1.id, t1.name, t2.name from test1 t1, test2 t2 where t1.id = t2.f_key. Как быть в таком случае?
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33848023
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как вы себе представляете этот апдейт, если у вас на клиенте неизвесен PK table2 - это раз
во вторых - вы мух от котлет отделите...
как я понимаю table1 и table2 у вас связано один-ко-многим
как вы себе представляете изменение table2.name именно на клиенте?
т.е. вы меняете имя 'name1' на 'name2' в одной строке (где table2.id = 1), а у вас строк с table2.name = 'name1' and table2.id =1 - не одна, остальные тоже должны поменятся, или как вы себе это представляете?
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33848154
krot-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!и как вы себе представляете этот апдейт, если у вас на клиенте неизвесен PK table2 - это раз
во вторых - вы мух от котлет отделите...
как я понимаю table1 и table2 у вас связано один-ко-многим
как вы себе представляете изменение table2.name именно на клиенте?
т.е. вы меняете имя 'name1' на 'name2' в одной строке (где table2.id = 1), а у вас строк с table2.name = 'name1' and table2.id =1 - не одна, остальные тоже должны поменятся, или как вы себе это представляете?

Именно так и представляю. Запрос конечно можно изменить на select t1.id, t1.name, t2.name, t2.id from test1 t1, test2 t2 where t1.id = t2.f_key

Или более правильно будет загрузить test1 и test2 в разные таблицы датасэта и установить между ними связь?

Вообще интересно, кто как пишет программы с большим количеством таблиц, связей и соответственно кучей форм? Хотябы общая архитектура.... Просто в ближайшее время надо будет писать немаленькую учетную систему, и соответственно интересен опыт других людей.
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33848212
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или более правильно будет загрузить test1 и test2 в разные таблицы датасэта и установить между ними связь?
наверное так лучше (имхо)
про общую архитектуру - лучше не грузить большие таблицы в DataSet целиком, а организовывать некий постраничный вывод(здесь обсуждалось, в смысле на ADO.NET, C#.NET, VB.NET форумах)
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33848730
krot-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но для каждой таблицы определенно надо иметь свой адаптер. Или я опять ошибаюсь..?
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33848812
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
определенно :)
...
Рейтинг: 0 / 0
DataSet + priamary key из sequence ?
    #33850818
RasimS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krot-sПробовал задать этот вопрос в разделе С#. Так никто и не ответил. Может тут кто поможет. Выкладываю сразу все посты:

как сделать так, чтобы при добавлении новой строки в DataGrid primary key автоматически генерировался? И чтобы он в DataGrid вообще не показывался?

Заполение грида:
productsAdapter = new OracleDataAdapter("select id, name from test", conn);
productsCmdBuilder = new OracleCommandBuilder(productsAdapter);
productsDataSet = new DataSet("productsDataSet");
productsAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
productsAdapter.Fill(productsDataSet, "menu");
dataGridView1.DataSource = productsDataSet.Tables["menu"];

Генерирование id:
cmd = new OracleCommand();
cmd.CommandText = "select seq.nextval from dual";
cmd.Connection = conn;
reader = cmd.ExecuteReader();
reader.Read();
int id = (int)reader.GetDecimal(0);

Подскажите, как это сделать автоматически?
И как не показывать id в гриде? Если ставить признак колонки Visible = false, то невозможно добавить новую строку...


Вот как я пока решил проблему с primary key:
Надо было все лишь добавить свой запрос в InsertCommand
вот код:
OracleCommand inscmd = new OracleCommand("insert into test (id, name) values (seq.nextval, :NAME)", conn);
inscmd.Parameters.Add(":NAME", OracleDbType.Varchar2, 14, "NAME");
productsAdapter.InsertCommand = inscmd;


Попутно встал следующий вопрос:
предположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц,
По поводу, что бы он автоматически генерировался нужно на таблице датасета поставить ограничение на уникальность и автоинкремент. Свойство так и называется autoincrement = true; autoincrementstep = 1; и т д. Разберешься. Хороший совет дам. Никогда не передавай это дело в базу. В логике базы должна быть своя уникальность, а используй только для своих нужд. По поводу выводу в грид, то просто не добавляй этот столбец и все проблемы
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet + priamary key из sequence ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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