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

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

Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится?
...
Рейтинг: 0 / 0
11.07.2006, 19:19
    #33846170
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
krot-s
Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится?
чего вдруг?!
...
Рейтинг: 0 / 0
11.07.2006, 19:24
    #33846181
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
2 krot-s
(по поводу 2 krot-sпредположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц)
вы имеете в виду у вас источником для грида служит DataSet с 2-мя и больше таблиц(DataTable)?
если это так - то зачем два DataSet-а?
или вы имели в виду что датасет у вас заполняется запросом select ...
from table1 join table2 и вам нужно изменить table1 & table2?
...
Рейтинг: 0 / 0
12.07.2006, 13:09
    #33847741
krot-s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
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
12.07.2006, 14:03
    #33848023
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
и как вы себе представляете этот апдейт, если у вас на клиенте неизвесен PK table2 - это раз
во вторых - вы мух от котлет отделите...
как я понимаю table1 и table2 у вас связано один-ко-многим
как вы себе представляете изменение table2.name именно на клиенте?
т.е. вы меняете имя 'name1' на 'name2' в одной строке (где table2.id = 1), а у вас строк с table2.name = 'name1' and table2.id =1 - не одна, остальные тоже должны поменятся, или как вы себе это представляете?
...
Рейтинг: 0 / 0
12.07.2006, 14:30
    #33848154
krot-s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
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
12.07.2006, 14:42
    #33848212
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
Или более правильно будет загрузить test1 и test2 в разные таблицы датасэта и установить между ними связь?
наверное так лучше (имхо)
про общую архитектуру - лучше не грузить большие таблицы в DataSet целиком, а организовывать некий постраничный вывод(здесь обсуждалось, в смысле на ADO.NET, C#.NET, VB.NET форумах)
...
Рейтинг: 0 / 0
12.07.2006, 16:15
    #33848730
krot-s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
Но для каждой таблицы определенно надо иметь свой адаптер. Или я опять ошибаюсь..?
...
Рейтинг: 0 / 0
12.07.2006, 16:32
    #33848812
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
определенно :)
...
Рейтинг: 0 / 0
13.07.2006, 13:28
    #33850818
RasimS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataSet + priamary key из sequence ?
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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet + priamary key из sequence ? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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