Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/89: Рейтинг темы: голосов - 89, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
1

Нужно связать БД SQL и С#

04.01.2010, 21:28. Показов 18561. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, плиз, с чего начать ...
В общем, на носу экзамен, а по предмету было всего две бесполезные лекции, да и те - об общих понятиях языка СиШарп, и за несколько дней до экзамена препод дал это задание. Пришлось срочно скачивать кучу книг по С# , пытаюсь разобраться , но вижу, что по времени никак не укладываюсь – помогите, плиз , хоть намекните .
Задание такого плана: продублировать таблицы SQL Server на C#, т.е. вывести таблицы SQL Server на Microsoft C# также в виде таблиц. Это необходимо проделать по технологии ADO.NET. Имеются в наличии: БД SQL (в формате .mdf), и форма для ввода данных для подключения к SQL (только форма, код для подключения к БД также отсутствует).
Насколько я заметил по книгам, выполняется это через System.Data.SqlServer (но так как я использую SQL Serevr Compact Edition, то: System.Data.SqlServerCe)
Нужно задействовать такие элементы, как SqlDataAdapter, SqlConnection, SqlCommand, DataSet (DataTable, DataColumn, DataRow) и некоторые другие.
Сложность состоит в том, что в БД содержится НЕ одна, а НЕСКОЛЬКО таблиц (естественно, имеются взаимосвязи между таблицами посредством одного или нескольких столбцов).
Помогите, плиз!!!

Добавлено через 2 часа 45 минут
Есть еще один вопрос (он вроде попроще).

Допустим, имеем ОДНУ таблицу с несколькими столбцами.

Вот как ими строчками осуществляется ее вывод в ListBox1 WindowsForms Application1:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void Form1_Load(object sender, EventArgs e)
        {
            //создаем новый объект DataSet
            DataSet ds = new DataSet();
            //вызываем функцию Fill для заполнения объекта
            //DataSet содержимым таблицы Customers
            dataAdapter.Fill(ds, "Customers");
            //получаем доступ к таблице Customers
            DataTable dt = ds.Tables["Customers"];
            //переносим данные в список
            foreach (DataRow dataRow in dt.Rows)
                {
                    ListBox1.Items.Add(dataRow["ContactName"] + "\t" +
                                            dataRow["CompanyName"]);
                }
        }
Мне же нужно вывести НЕСКОЛЬКО таблиц.

Как должен выглядеть код?
Может, нужно написать строчки
C#
1
dataAdapter.Fill(ds, "Название_таблицы1");
- и -
C#
1
DataTable dt = ds.Tables["Название_Таблицы1"];
несколько раз? Или как ??? Поскажите, плиз !!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2010, 21:28
Ответы с готовыми решениями:

Как связать таблицы sql
подключила в delphi 2 таблицы SQL, таблицы товар и поставщик. Как сделать что бы при выборе...

Как связать 2 таблицы sql?
Всем привет! Я еще новичок, прошу проверить скрипт, главная таблица: а соединяю с таблицей:...

Связать готовый запрос в SQl c Delphi
Добрый день! В Microsoft SQL Server Management Studio находятся все базы данных(и все таблицы) с...

Как связать ERwin с SQL Server2008?
Подскажите, пожалуйста Как связать ERwin(версия 7) с SQL Server2008? Если при выборе СУБД в ERwin...

14
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
04.01.2010, 22:49 2
MSDN Внизу есть пример на C# с использованием SqlClient
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
04.01.2010, 23:00  [ТС] 3
Цитата Сообщение от Alligieri Посмотреть сообщение
MSDN Внизу есть пример на C# с использованием SqlClient
В приведенном там примере работа происходит с ОДНОЙ таблицей,
а в моей ситуации их НЕСКОЛЬКО, да еще внутри них столбцы увязаны.

Сейчас проблема состоит в выведении этих данных на экран в Microsoft C# :
т.е. с командами

C#
1
dataAdapter.Fill(ds, "Customers")
и
C#
1
DataTable dt = ds.Tables["Customers"]
Вот и вопрос - для того, чтобы заполнить несколько таблиц методом Fill(), нужно просто продублировать эти строчки, заменяя название таблиц, или как ???
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
05.01.2010, 01:24 4
logined4, почитайте про DataSet и его составляющую - коллекцию DataTable (DataSet.Tables). Создайте DataSet и заполняйте данными вашей БД. Тем более на форуме куча примеров.
0
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
05.01.2010, 11:45 5
тут не плохо написано про то что вам нужно. почитайте. надеюсь поможет
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
05.01.2010, 14:32  [ТС] 6
Нарооод! Уделите минуту - взгляните, в правильном ли направлении мыслю?!
ADO.NET литературу прочитал, там только опять же для одной таблицы.

Итак,

тут подумал, что решить эту проблему можно посредством визуальной среды Microsoft C# Studio 2008.
Создал форму Form1, поместил на нее элемент listBox1 и sqlDataAdapter.
Тут же настроил sqlDataAdapter (для подсоединения к БД использовал команду Add Data Source, где выбрал файл БД в формате .mdf), выбрал SQL Statements, а там уже при помощи Построителя Запросов (Query Builder) выбрал нужные таблицы и столбцы. В результате он написал Script Generated, Table Generated. Просмотрел, вроде он все "изъял" правильно. В результате всего этого появился еще элемент sqlConnection. (Form1.resx - там все прочёл)

Теперь,

нужно собственно все это заполнить (применил метод Fill() - естественно, задействовал DataSet и DataTable).

Вот как я это написал:

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
private void Form1_Load(object sender, EventArgs e)
        {
            //создаем новый объект DataSet
            DataSet ds = new DataSet();
            //вызываем функцию Fill для заполнения объекта
            //DataSet содержимым таблиц
            sqlDataAdapter1.Fill(ds, "katalog");
            sqlDataAdapter1.Fill(ds, "Col");
            sqlDataAdapter1.Fill(ds, "PAvto");
            sqlDataAdapter1.Fill(ds, "Pokup");
            sqlDataAdapter1.Fill(ds, "Prodavec");
            sqlDataAdapter1.Fill(ds, "Zap");
            sqlDataAdapter1.Fill(ds, "PZap");
            //получаем доступ к таблицам
            DataTable dt1 = ds.Tables["katalog"];
            DataTable dt2 = ds.Tables["Col"];
            DataTable dt3 = ds.Tables["PAvto"];
            DataTable dt4 = ds.Tables["Pokup"];
            DataTable dt5 = ds.Tables["Prodavec"];
            DataTable dt6 = ds.Tables["Zap"];
            DataTable dt7 = ds.Tables["PZap"];
            //переносим данные в список
            foreach (DataRow dataRow in dt1.Rows)
                {
                    listBox1.Items.Add(dataRow["KodAvto"] + "\t" + 
                                        dataRow["Model"] + "\t" +  
                                        dataRow["Engine"] + "\t" + 
                                        dataRow["Complect"] + "\t" +
                                        dataRow["Country"]);
                }
        }
Вопрос: смогу ли я при таком коде хотя бы эти ТАБЛИЦЫ и данные в них предоставить для вывода??
Когда я запустил на исполнение, он выдал мне пустой listBox1... (ошибок он никаких не выдал, все "чисто").
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
05.01.2010, 14:44 7
где подключение к БД (sqlConnection)?
Теперь всё что Вы заполнили в таблицы можно добавить в datagridwiev
MyDataGridWiev.datasource = dt1
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
05.01.2010, 16:36  [ТС] 8
brugon,

Да, относительно sqlConnection есть загвоздка.

Вот скрин моей формы:



Как должен выглядеть этот самый код SqlConnection в данном случае?
Сам попытался написать, но все время выдает ошибки.
Знаю, что при обращении к БД соединение нужно открывать/закрывать, а вот сам код нигде толком не увидел... или просто не смог его адаптировать ...

Добавлено через 35 минут
Вот скидываю сам архив с проектом... может, так будет удобнее понять, что не так ...

http://dump.ru/file/4079386

Добавлено через 38 минут
Нашелся тут скрипт подсоединения к БД.Даже обстоятельно написан.
Теперь вопрос - как его "присоединить"/"подсоединить " к текущему проекту?
Что нужно написать и где ???
0
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
05.01.2010, 17:45 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void Form1_Load(object sender, EventArgs e)
        {
              SqlConnection connection = new SqlConnection();
              SqlDataAdapter dataAdapter = new SqlDataAdapter();
 
              // тут должна быть ваша строка подклюючения
              connection.ConnectionString = "Data Source=S-09-0810;Initial Catalog=testCatalog;Integrated Security=True"; 
              
              SqlCommand command = _connection.CreateCommand();
              // в качестве команды пишем sql запрос на выборку данных из таблицы БД
              command.CommandText = "SELECT * FROM myTable";               
              dataAdapter.SelectCommand = command;
              
              DataSet ds = new DataSet();
 
              connection .Open();
              dataAdapter.Fill(ds, "myTable");
              myDataGrid.DataSource = ds.Tables["myTable"].DefaultView;
              connection .Close();
         }
в общем как-то так .. как работает не проверял, но смысл такой.
если же вам нужно работать со связанными таблицами, то можно использовать DataView. про него можно почитать тут
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
05.01.2010, 17:48  [ТС] 10
Цитата Сообщение от mitsky Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void Form1_Load(object sender, EventArgs e)
        {
              SqlConnection connection = new SqlConnection();
              SqlDataAdapter dataAdapter = new SqlDataAdapter();
 
              // тут должна быть ваша строка подклюючения
              connection.ConnectionString = "Data Source=S-09-0810;Initial Catalog=testCatalog;Integrated Security=True"; 
              
              SqlCommand command = _connection.CreateCommand();
              // в качестве команды пишем sql запрос на выборку данных из таблицы БД
              command.CommandText = "SELECT * FROM myTable";               
              dataAdapter.SelectCommand = command;
              
              DataSet ds = new DataSet();
 
              connection .Open();
              dataAdapter.Fill(ds, "myTable");
              myDataGrid.DataSource = ds.Tables["myTable"].DefaultView;
              connection .Close();
         }
в общем как-то так .. как работает не проверял, но смысл такой.
если же вам нужно работать со связанными таблицами, то можно использовать DataView. про него можно почитать тут
Интересно, а как это адаптировать для 7 таблиц ??? =)
0
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
05.01.2010, 17:57 11
как я уже писал выше, вы можете перейти по данной ссылке и ознакомится с тем как это можно сделать. надеюсь поможет
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
05.01.2010, 19:43  [ТС] 12
Ну все, запутали в хлам...

Кто может, напишите, плиз, ПРОЦЕДУРУ, как все делать... если можно, в деталях.

А то уже нахожу ценные куски кода:

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
public partial class Form1 : Form
    {
        string ConnectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""D:\Programs\Code на C# с диска (Разоаботка Windows приложений)\RBProduct.mdb"";User ID=Admin;Jet OLEDB:Encrypt Database=False";
        string commandText = @"SELECT [Адрес поставщика],[Код поставщика], Поставщик, Телефон FROM Поставщики";
 
        string commandText2 = @"SELECT [Код поставщика],[Код продукта], Наименование, [Цена,$] FROM Товары";
        public Form1()
        {
            InitializeComponent();
           
           
            //Соединение...
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = ConnectionString;
            conn.Open();
 
//==================================================================
            //SQL -запросы
            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = commandText;
 
 
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = myCommand;
            DataSet ds = new DataSet();
            dataAdapter.TableMappings.Add("Table", "Поставщики");
            dataAdapter.Fill(ds);
            dataGridView1.DataSource = ds.Tables["Поставщики"].DefaultView;
            
//=================================================================
//Добавляю объект для второй таблицы(Товары)
 
 
           OleDbCommand myCommand2 = new OleDbCommand();
           myCommand2.Connection = conn;
           myCommand.CommandText = commandText2;
            
            
           OleDbDataAdapter dataAdapter2 = new OleDbDataAdapter();
           dataAdapter2.SelectCommand = myCommand2;
           dataAdapter2.TableMappings.Add("Table","Товары");
           dataAdapter2.Fill(ds);//Если все ниже коментирую все выходит...конечно без второй таблицы
            
            DataRelation dataRelation;
            DataColumn dataColumn1;
            DataColumn dataColumn2;
            dataColumn1 = ds.Tables["Поставщики"].Columns["Код поставщика"];
            dataColumn2 = ds.Tables["Товары"].Columns["Код поставщика"];
            dataRelation = new DataRelation("Товары этого поставщика", dataColumn1, dataColumn2);
 
            ds.Relations.Add(dataRelation );
 
            DataViewManager dsview = ds.DefaultViewManager;
            dataGridView1.DataSource = dsview;
            dataGridView1.DataMember = "Поставщики";
            conn.Close();
        }
    }
а даже и не понятно, как его адаптировать.

В общем, изложите, плиз, хотя бы П Р О Ц Е Д У Р У создания связи между БД и SQL с последующим выводом данных содержимого БД на экран через Microsoft C# в табличном виде.

Добавлено через 1 час 26 минут
...вот вопрос... вот этот выложенный код.. он будет работать без каких либо "визуальных" преобразований на самой Форме? Проще говоря, нужно ли вносить какие-нибудь компоненты типа sqlConnection, sqlDataAdapter, DataGridView и т.д. на саму форму Form1 ?
0
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
06.01.2010, 10:34 13
вот примерный код для вывода 2х таблиц, попробуйте тоже самое, только для нужного вам количества
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
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = "myConnection";
            OleDbCommand command = new OleDbCommand();
            command.Connection = conn;
            command.CommandText = "SELECT * FROM myFirstTable";
 
            OleDbDataAdapter dAdapter = new OleDbDataAdapter();
            dAdapter.SelectCommand = command;
 
            conn.Open();
 
            DataSet dSet = new DataSet();
            dAdapter.TableMappings.Add("sourceTable", "dataSetTable1");
            dAdapter.Fill(dSet);
 
            OleDbCommand command2 = new OleDbCommand();
            command2.Connection = conn;
            command2.CommandText = "SELECT * FROM mySecondTable";
            OleDbDataAdapter dAdapter2 = new OleDbDataAdapter();
            dAdapter2.SelectCommand = command2;
            dAdapter2.TableMappings.Add("sourceTable", "dataSetTable2");
            dAdapter2.Fill(dSet);
 
            //DataColumn dColumn1 = ds.Tables["dataSetTable1"].Columns["myColumn"];
            //DataColumn dColumn2 = ds.Tables["dataSetTable2"].Columns["myColumn"];
            //DataRelation dRalation = new DataRelation("relationName", dColumn1, dColumn2);
            //dSet.Relations.Add(dRalation);
 
            DataViewManager dsView = dSet.DefaultViewManager;
            dataGrid1.DataSource = dsView;
            //dataGrid1.DataMember = "Туристы";
                  
            conn.Close();
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 7
06.01.2010, 17:45  [ТС] 14
У меня прикол в другом...
Я использую Microsoft SQL Server 2005 / Microsoft SQL Server Compact Edition 3.5
Команда соединения вроде как должна быть SqlConnection...

Но когда я ее задействую, он пишет, что такой не знает.
Как это так?
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
06.01.2010, 21:41 15
Чего не знает, точное описание ошибки(оригинал?). Также строку соединения.
Телепаты в отпуске
0
06.01.2010, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2010, 21:41
Помогаю со студенческими работами здесь

Как связать БД в Denwer на SQL с Borland C++
Имеется база, написанная в Denwer. Форматы данных: таблицы .frm, а самой базы - .opt. Тут возникает...

Нужно связать таблицы
С огромным уважением здравствуйте :) У меня есть две таблицы медкарты и записи на прием, у обеих...

Нужно связать таблицу
Помогите пожалуйста связать таблицу, я вроде сделал но как-то криво (мне кажется)

Как связать таблицы через sql запрос
Добрый день, имеется, к примеру, такие таблицы со связью:...


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

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