11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139
1

Доступ к DataSet. Организация кода программы

13.01.2014, 16:29. Показов 1683. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дико извиняюсь за идиотский вопрос. Делаю лабу. Есть БД с тремя связанными табличками. Нужно реализовать чтение и редактирование их значений с помощью типизированного DataSet. Я набросал DataSet для своей БД. И по клику на кнопку, данные из одной из моих табличек грузятся в ListBox. Но весть не писать же мне всю эту простыню для каждой из трёх таблиц. Как мне вынести куда-нибудь (в класс, метод или ещё куда-нибудь) описание структуры БД, чтобы по клику на кнопку я только передавал запрос к ДатаАдаптеру соответствующей таблицы.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace Lab8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
            
         private void button1_Click(object sender, EventArgs e)
        {
 
            DataSet Records = new DataSet(); //dataset со всеми таблицами 
 
            DataTable GoodsTable = Records.Tables.Add("goods"); //товары
            GoodsTable.Columns.Add(new DataColumn("goods_id", typeof(int)));
            GoodsTable.Columns.Add(new DataColumn("goods_type", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_manufacturer", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_model", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_quantity", typeof(int)));
            GoodsTable.Columns.Add(new DataColumn("goods_price", typeof(decimal)));
 
            DataColumn columnGoodsModel = GoodsTable.Columns["goods_model"];
            UniqueConstraint constraintGoodsModel = new UniqueConstraint(columnGoodsModel);
            GoodsTable.Constraints.Add(constraintGoodsModel);
 
            DataColumn columnId = GoodsTable.Columns["goods_id"];
            GoodsTable.PrimaryKey = new[] { columnId };
            columnId.AutoIncrement = true;
            columnId.AutoIncrementSeed = 1;
            columnId.AutoIncrementStep = 1;
            columnId.ReadOnly = true;
 
 
            DataTable SalesTable = Records.Tables.Add("sales"); //продажи
            SalesTable.Columns.Add(new DataColumn("sale_id", typeof(int)));
            SalesTable.Columns.Add(new DataColumn("goods_id", typeof(int)));
            SalesTable.Columns.Add(new DataColumn("sale_quantity", typeof(int)));
            SalesTable.Columns.Add(new DataColumn("sale_date", typeof(DateTime)));
            SalesTable.Columns.Add(new DataColumn("seller_id", typeof(int)));
            SalesTable.Columns.Add(new DataColumn("sale_order", typeof(int)));
 
            DataColumn colId = SalesTable.Columns["sale_id"];
            SalesTable.PrimaryKey = new[] { colId };
            colId.AutoIncrement = true;
            colId.AutoIncrementSeed = 1;
            colId.AutoIncrementStep = 1;
            colId.ReadOnly = true;
 
 
            DataTable SellersTable = Records.Tables.Add("sellers"); //продавцы
            SellersTable.Columns.Add(new DataColumn("seller_id", typeof(int)));
            SellersTable.Columns.Add(new DataColumn("seller_name", typeof(string)));
 
 
            SqlDataAdapter GoodsDA = new SqlDataAdapter();
            SqlDataAdapter SalesDA = new SqlDataAdapter();
            SqlDataAdapter SellersDA = new SqlDataAdapter();
 
 
 
 
            SqlConnection connection = new SqlConnection(@"Data Source=localhost;Initial Catalog=LabDB;Integrated Security=True");
 
 
 
            SqlCommand selectCommand = new SqlCommand("SELECT goods_id, goods_type, goods_manufacturer, goods_model, goods_quantity, goods_price FROM goods ORDER BY goods_id DESC", connection);
 
 
            GoodsDA.SelectCommand = selectCommand;
 
            GoodsDA.Fill(GoodsTable);
 
 
            foreach (DataRow row in GoodsTable.Rows)
            {
                listBox1.Items.Add(row["goods_id"] + " " + row["goods_model"] + " " + row["goods_quantity"]);
 
            }
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2014, 16:29
Ответы с готовыми решениями:

При попытке обновить в DataSet не происходит генерация кода в .designer.cs
Здравствуйте, возникла вот какая проблема существует DataSet к нему подключено много таблиц и...

Правильная организация кода программы C++ Coocox
Добрый день! Пишу программу в Coocox 1.7.8 C++ под STM32F103. Из-за того что программа...

Организация кода. Проектирование кода
Доброго времени суток! Появилось желание реализовать в учебных целях библиотеку для связанных...

Организация тонкого клиента на ноутбуке (доступ к PC)
Здравствуйте форумчане! Достаточно давно пользуюсь исключительно ноутбуками, в последние 2 года...

6
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
13.01.2014, 17:57 2
Цитата Сообщение от AlexanderWM Посмотреть сообщение
C#
1
SqlCommand selectCommand = new SqlCommand("SELECT goods_id, goods_type, goods_manufacturer, goods_model, goods_quantity, goods_price FROM goods ORDER BY goods_id DESC", connection);
Не совсем понял ты имеешь ввиду может это?

C#
1
SqlCommand selectCommand = new SqlCommand("SELECT * FROM goods ORDER BY goods_id DESC", connection);
Добавлено через 14 минут
Все вкурил что ты хочешь

C#
1
2
3
4
5
6
7
8
9
 DataSet Records = new DataSet(); //dataset со всеми таблицами 
 
            DataTable GoodsTable = Records.Tables.Add("goods"); //товары
            GoodsTable.Columns.Add(new DataColumn("goods_id", typeof(int)));
            GoodsTable.Columns.Add(new DataColumn("goods_type", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_manufacturer", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_model", typeof(string)));
            GoodsTable.Columns.Add(new DataColumn("goods_quantity", typeof(int)));
            GoodsTable.Columns.Add(new DataColumn("goods_price", typeof(decimal)));
Эту требуху писать не надо существуют запросы БД которые выдают и таблицы которые в ней содержатся и колонки в таблицах ....
0
11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139
13.01.2014, 18:05  [ТС] 3
Я имею в виду необходимость вынести часть кода:
C#
1
2
3
4
5
DataSet Records = new DataSet(); //dataset со всеми таблицами 
 
            DataTable GoodsTable = Records.Tables.Add("goods"); //товары
...
            SellersTable.Columns.Add(new DataColumn("seller_name", typeof(string)));
Куда-нибудь из обработчика нажатия кнопки. Таким образом, чтобы постоянно иметь доступ к этому коду

Добавлено через 7 минут
Цитата Сообщение от EVG-1980 Посмотреть сообщение
Не совсем понял ты имеешь ввиду может это?

SqlCommand selectCommand = new SqlCommand("SELECT * FROM goods ORDER BY goods_id DESC", connection);

Добавлено через 14 минут
Все вкурил что ты хочешь
Эту требуху писать не надо существуют запросы БД которые выдают и таблицы которые в ней содержатся и колонки в таблицах ....
Я знаю, что существуют Но лаба, к сожалению именно про DataSet
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
13.01.2014, 18:21 4
AlexanderWM, ну дак создай свой класс


C#
1
2
3
4
5
6
7
8
 public  class my
 {
 public my()
{
 // сюда засунь все
 } 
 
}
а на кнопке вызывай

Добавлено через 15 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MY my =new MY("goods");
        }
    }
 
    public  class MY
    {
 
        public MY(string table)
        {
                  DataSet Records = new DataSet(); //dataset со всеми таблицами 
            if (table == "goods")
            {
                
                DataTable GoodsTable = Records.Tables.Add("goods"); //товары
                GoodsTable.Columns.Add(new DataColumn("goods_id", typeof(int)));
                GoodsTable.Columns.Add(new DataColumn("goods_type", typeof(string)));
                GoodsTable.Columns.Add(new DataColumn("goods_manufacturer", typeof(string)));
                GoodsTable.Columns.Add(new DataColumn("goods_model", typeof(string)));
                GoodsTable.Columns.Add(new DataColumn("goods_quantity", typeof(int)));
                GoodsTable.Columns.Add(new DataColumn("goods_price", typeof(decimal)));
                // ....
            }
 
            if (table == "....")
            {
                //  .....
            }
 
        }
    }
}
1
11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139
14.01.2014, 14:50  [ТС] 5
Это хорошо, но я же всё равно не смогу "добраться" до GoodsTable.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
14.01.2014, 15:29 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public  class MY
    {
        public DataTable createTable(DataSet Records, string table)
        {
 
            DataTable Table = new DataTable(); 
           
            if (table == "goods")
            {
 
                Table = Records.Tables.Add("goods"); 
                Table.Columns.Add(new DataColumn("goods_id", typeof(int)));
                // ....
            }
            return Table;    
        } 
    
    }
C#
1
2
MY my =new MY();
DataTable GoodsTable=my.createTable(Records, "goods");
1
334 / 270 / 18
Регистрация: 19.01.2011
Сообщений: 597
15.01.2014, 11:24 7
Мммм.... А что мешает создать типизированный датасет через конструктор VS, в нем создать таблицы с необходимой структурой, и наполнять их только данными. Т.е. обращение к таблице товаров будет выглядеть так:
C#
1
2
3
4
5
MyDataSetClass MyDataSet=new MyDataSetClass();
//заполнить через датаадаптер или вручную данными
int countRows=MyDataSet.GoodsTable.Rows.Count; //количество записей в таблице
MyDataSet.GoodsTableRow newRow=MyDataSet.GoodsTable.NewGoodsTableRow(); 
newRow.some_field="some_value"; //добавление новой хаписи.
Представьте что у Вас 20 таблиц. Вы все будете создавать руками? Или напишите более точно задачу в тему.
Прямой доступ с таблице по ее имени можно сделать так:
C#
1
DataTable GoodsTable = Records.Tables["goods"]; //товары
0
15.01.2014, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2014, 11:24
Помогаю со студенческими работами здесь

Организация кода
Задача такая: Открывается окно, где требуется ввести путь до БД. Вводишь правильный путь, затем...

Организация кода по категориям
Всем привет :senor:

Правильная организация кода в проекте
Доброго дня! При создании проекта для Windows генерятся два файла - файл формы и файл программы....

Длинные цепочки операций. Организация кода
Добрый день! Есть программа, которая периодически проверяет email, получает письма и с каждым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru