Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 30.10.2018
Сообщений: 39
1
.NET 4.x

Windows Forms и Microsoft SQL

21.10.2019, 15:26. Показов 9310. Ответов 17

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста_
Какую книгу мне читать, что-бы хорошо понять "связывание" и "работу Windows Forms" с "Microsoft SQL Server" ???
У меня работа над "Windows Forms application с БД" (c#)_
Спасибо_

Добавлено через 2 часа 3 минуты
Пожалуйста, будьте активнее

Добавлено через 2 минуты
Мне это действительно очень нужно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2019, 15:26
Ответы с готовыми решениями:

SQL в Windows Forms
Всем привет Задача такова: У меня есть Grid с данными, к нему я подключил БД SQL Мне нужно...

Подскажите касаемо Windows Forms и MS SQL
Всем привет, выручите пожалуйста советом. Есть БД в MS SQL. Хочу создать UI приложение используя...

Возможно ли подключить Microsoft App Center в приложение Windows Forms?
Возможно ли подключить Microsoft Visual Studio App Center (https://appcenter.ms/) в приложение...

Соединение с SQL Server в С# (Windows forms)
Здравствуйте. Имею дело с разработкой собственной БД (и приложения для него) первый раз = просьба...

17
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
21.10.2019, 15:42 2
..ну, так с документации начните .. например
How to: Bind data to the Windows Forms DataGridView control
0
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 2
23.10.2019, 00:21 3
Самому надо было такую для создания программы, не нашел ничего хорошего так что на форумах по запросам ищу и в ютубе смотрю
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
23.10.2019, 07:51 4
Petros Tepoyan,
Вот примерчик для справки по работе с MS SQL:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
 
namespace Database
{
    /// <summary>
    /// Класс для работы с базой данных SQL сервера
    /// </summary>
    public class SqlServer
    {
        public string Connection { get; set; } = string.Empty; // строка подключения
        public string LastError { get; set; } = string.Empty; // последняя ошибка
 
        /// <summary>
        /// Запрос на вставку данных
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="row">Набор данных для вставки</param>
        /// <returns></returns>
        public bool InsertInto(string table, Dictionary<string, string> columns)
        {
            using (var con = new SqlConnection(Connection))
            {
                try
                {
                    con.Open();
                    // формирование запроса для вставки
                    var names = new List<string>();
                    var values = new List<string>();
                    foreach (var key in columns.Keys)
                    {
                        names.Add("[" + key + "]");
                        values.Add("N'" + columns[key] + "'");
                    }
                    var sql = string.Format("INSERT INTO [{0}] ({1}) VALUES({2})",
                            table.ToLower(), string.Join(", ", names), string.Join(", ", values));
                    using (SqlCommand cmd = new SqlCommand(sql, con))
                    {
                        cmd.ExecuteNonQuery();
                    }
                    con.Close();
                    LastError = "";
                    return true;
                }
                catch (Exception ex)
                {
                    LastError = ex.Message;
                    return false;
                }
            }
        }
 
        /// <summary>
        /// Запрос на изменение данных
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="columns">Набор данных для изменения</param>
        /// <returns></returns>
        public bool UpdateInto(string table, Dictionary<string, string> columns)
        {
            using (var con = new SqlConnection(Connection))
            {
                try
                {
                    con.Open();
                    // формирование запроса для изменения
                    var values = new List<string>();
                    var indexName = columns.Keys.First();
                    var indexValue = columns[indexName];
                    foreach (var key in columns.Keys.Skip(1))
                    {
                        values.Add("[" + key + "] = N'" + columns[key] + "'");
                    }
                    var sql = string.Format("UPDATE [{0}] SET {1} WHERE [{2}]=N'{3}'",
                            table.ToLower(), string.Join(", ", values), indexName, indexValue);
                    using (SqlCommand cmd = new SqlCommand(sql, con))
                    {
                        cmd.ExecuteNonQuery();
                    }
                    con.Close();
                    LastError = "";
                    return true;
                }
                catch (Exception ex)
                {
                    LastError = ex.Message;
                    return false;
                }
            }
        }
 
        /// <summary>
        /// Удаление строки из таблицы
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="columns">Данные ключа для удаления</param>
        /// <returns></returns>
        public bool DeleteInto(string table, Dictionary<string, string> columns)
        {
            using (var con = new SqlConnection(Connection))
            {
                try
                {
                    con.Open();
                    // формирование запроса для удаления
                    var indexName = columns.Keys.First();
                    var indexValue = columns[indexName];
                    var sql = string.Format("DELETE FROM [{0}] WHERE [{1}]=N'{2}'", table, indexName, indexValue);
                    using (SqlCommand cmd = new SqlCommand(sql, con))
                    {
                        cmd.ExecuteNonQuery();
                    }
                    con.Close();
                    LastError = "";
                    return true;
                }
                catch (Exception ex)
                {
                    LastError = ex.Message;
                    return false;
                }
            }
        }
 
        /// <summary>
        /// Удаление записей таблицы, которых больше нет в модели, а есть в базе данных
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="keyfield">Ключевой столбец</param>
        /// <param name="modelKeyList">Список ключей в модели</param>
        /// <returns></returns>
        public bool DeleteInto(string table, string keyfield, IEnumerable<Guid> modelKeyList)
        {
            var ds = GetRows(table);
            if (ds.Tables.Count == 0) return true;
            var fordelete = new List<Guid>(); // список ключевых значений для удаления
            // получаем ключи из базы данных
            foreach (var row in ds.Tables[0].Rows.Cast<DataRow>())
            {
                var key = Guid.Parse(row.ItemArray[0].ToString());
                // если ключ базы данных отсутствует в списке ключей модели
                if (!modelKeyList.Contains(key))
                    fordelete.Add(key); // то добавляем его в список
            }
            if (fordelete.Count == 0) return true;
            using (var con = new SqlConnection(Connection))
            {
                try
                {
                    con.Open();
                    // удаление выбранных ключей
                    foreach (var key in fordelete)
                    {
                        var sql = string.Format("DELETE FROM [{0}] WHERE [{1}]=N'{2}'", table, keyfield, key);
                        using (SqlCommand cmd = new SqlCommand(sql, con))
                        {
                            cmd.ExecuteNonQuery();
                        }
                    }
                    con.Close();
                    LastError = "";
                    return true;
                }
                catch (Exception ex)
                {
                    LastError = ex.Message;
                    return false;
                }
            }
        }
 
        /// <summary>
        /// Получение набора данных из таблицы
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="likefield">Имя поля для фильтра</param>
        /// <param name="text2find">Значение для фильтра</param>
        /// <returns></returns>
        public DataSet GetRows(string table, string likefield = null, string text2find = null)
        {
            using (var con = new SqlConnection(Connection))
            {
                var sql = BuildQuery(table, likefield, text2find);
                using (var da = new SqlDataAdapter(sql, con))
                {
                    var ds = new DataSet();
                    try
                    {
                        da.Fill(ds, table);
                        LastError = "";
                    }
                    catch (Exception ex)
                    {
                        LastError = ex.Message;
                    }
                    return ds;
                }
            }
        }
 
        /// <summary>
        /// Построение текста запроса SELECT
        /// </summary>
        /// <param name="table">Имя таблицы</param>
        /// <param name="likefield">Имя поля для фильтра</param>
        /// <param name="text2find">Значение для фильтра</param>
        /// <returns></returns>
        private string BuildQuery(string table, string likefield = null, string text2find = null)
        {
            var sql = string.Format("SELECT * FROM [{0}]", table);
            if (!string.IsNullOrWhiteSpace(likefield) && !string.IsNullOrWhiteSpace(text2find))
                sql += string.Format(" WHERE ([{0}] LIKE N'{1}%')", likefield, text2find);
 
            return sql;
        }
 
    }
}
Код приложения, где этот класс используется, вы найдёте здесь: Автоматизация работы приёмной комиссии ВУЗа (модель, б.д. MSSQL)
4
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
24.10.2019, 16:46 5
ashsvis, посмотрел прогу, класно получилась. скажи как такой же отчет сделать как у тебя?
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
24.10.2019, 17:54 6
Цитата Сообщение от VladimirKazan Посмотреть сообщение
как такой же отчет сделать как у тебя?
Есть три класса:
1. Класс столбцов (колонок таблицы)
Кликните здесь для просмотра всего текста

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
using System.Collections.Generic;
 
namespace Reports
{
    /// <summary>
    /// Колонки (заголовки) отчета
    /// </summary>
    public class ReportColumns : List<ReportColumn>
    {
        /// <summary>
        /// Добавить заголовки
        /// </summary>
        /// <param name="args"></param>
        public void Add(params ReportColumn[] args)
        {
            foreach (var item in args)
                base.Add(item);
        }
    }
 
    /// <summary>
    /// Ширины колонок (заголовков) отчета
    /// </summary>
    public class ReportColumn
    {
        public ReportColumn(string text = "", int width = 100)
        {
            Text = text;
            Width = width;
        }
 
        public string Text { get; set; }
        public int Width { get; set; } = 100;
    }
 
}

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
34
35
36
37
using System.Collections.Generic;
 
namespace Reports
{
    /// <summary>
    /// Строки отчета
    /// </summary>
    public class ReportRows :List<ReportRow>
    {
        // добавить строку отчета
        public void Add(int level = 0, params string[] args)
        {
            var row = new ReportRow() { Level = level };
            row.Add(level, args);
            base.Add(row);
        }
    }
 
    /// <summary>
    /// Строка отчета
    /// </summary>
    public class ReportRow
    {
        public List<string> Items { get; set; } = new List<string>(); // значения в колонках
        public int Level { get; set; } // уровень вложенности строки
 
        /// <summary>
        /// Добавить значения для колонок строки
        /// </summary>
        /// <param name="args"></param>
        public void Add(int level = 0, params string[] args)
        {
            foreach (var item in args)
                Items.Add(item);
        }
    }
}

3. Класс отчёта
Кликните здесь для просмотра всего текста
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
using System;
using System.Drawing;
using System.Drawing.Printing;
 
namespace Reports
{
    /// <summary>
    /// Отчёт, содержит заголовки и строки со столбцами
    /// </summary>
    public class Report
    {
        public string Caption { get; set; } = string.Empty; // заголовок отчета
        public ReportColumns ReportColumns { get; set; } = new ReportColumns(); // колонки отчета
        public ReportRows ReportRows { get; set; } = new ReportRows(); // строки отчета
        public Action<object, PrintPageEventArgs, RectangleF, PointF> PrintPage { get; set; }
        /// <summary>
        /// Инициализация
        /// </summary>
        public void Clear()
        {
            Caption = string.Empty;
            ReportColumns.Clear();
            ReportRows.Clear();
        }
    }
}

А применяются эти классы в методах статического класса:
Кликните здесь для просмотра всего текста

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
using EnrolleeModel;
using System.Drawing;
using System.Linq;
 
namespace Reports
{
    /// <summary>
    /// Построитель отчетов
    /// </summary>
    public static class ReportsBuilder
    {
        /// <summary>
        /// Отчет "Анкетные данные абитуриентов, имеющих красный диплом или медаль"
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public static Report GetEnrolleesWithGoldMedal(Root root)
        {
            var caption = "Анкетные данные абитуриентов, имеющих красный диплом или медаль";
            var report = new Report
            {
                Caption = caption
            };
            report.ReportColumns.Add(
                new ReportColumn("Рег. №"),
                new ReportColumn("Фамилия", 120),
                new ReportColumn("Имя", 120),
                new ReportColumn("Отчество", 120),
                new ReportColumn("Дата рождения", 150),
                new ReportColumn("Специальность", 150));
            // добавляем строки в отчет
            foreach (var item in root.Enrollees.Where(item => item.GoldMedal))
            {
                report.ReportRows.Add(0, $"{item.RegistrationNumber}", 
                                      $"{item.Surname}", $"{item.FirstName}", $"{item.LastName}",
                                      $"{item.BirthDay.ToShortDateString()}", $"{Helper.SpecialityById(item.IdSpeciality)}");
            }
            // определение обработчика печати страницы отчета
            report.PrintPage = (o, e, rect, offset) => 
            {
                SizeF strSize = new SizeF();
                var strPoint = offset;
                // Печать заголовка таблицы
                strPoint.X = rect.X;
                using (var headerfont = new Font("Arial", 12, FontStyle.Italic))
                using (var sf = new StringFormat())
                {
                    sf.Alignment = StringAlignment.Center;
                    sf.LineAlignment = StringAlignment.Center;
                    foreach (var header in report.ReportColumns)
                    {
                        strSize = e.Graphics.MeasureString(header.Text, headerfont);
                        var r = new Rectangle(Point.Ceiling(strPoint),
                            new Size(header.Width, (int)strSize.Height));
                        e.Graphics.DrawString(header.Text, headerfont, Brushes.Navy, r, sf);
                        strPoint.X += header.Width;
                    }
                }
                // Печать строк таблицы
                strPoint.Y += strSize.Height + 10;
                using (var rowfont = new Font("Arial", 10, FontStyle.Regular))
                using (var sf = new StringFormat())
                {
                    sf.Alignment = StringAlignment.Center;
                    sf.LineAlignment = StringAlignment.Center;
                    foreach (var row in report.ReportRows)
                    {
                        strPoint.X = rect.X;
                        string value; // здесь будет значение
                        for (var i = 0; i < report.ReportColumns.Count; i++)
                        {
                            value = row.Items[i];
                            var r = new Rectangle(Point.Ceiling(strPoint),
                                new Size(report.ReportColumns[i].Width, (int)strSize.Height));
                            e.Graphics.DrawRectangle(Pens.Black, r);
                            e.Graphics.DrawString(value, rowfont, Brushes.Black, r, sf);
                            strPoint.X += report.ReportColumns[i].Width;
                        }
                        strPoint.Y += strSize.Height;
                    }
                }
            };
            return report;
        }
...

Вызов отчёта в обработчике события выбора пункта меню:
C#
1
2
3
4
5
        private void tsmiReport1_Click(object sender, EventArgs e)
        {
            // показываем окно первого отчета
            new ReportsForm(ReportsBuilder.GetEnrolleesWithGoldMedal(_root)).ShowDialog();
        }
Здесь можно посмотреть код целиком
1
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
26.10.2019, 12:29 7
Что значит статический класс? Если я обращаюсь к конкретной базе данных я в "статическом" указываю обращение и что выводить? Где мне именно указать?

C#
1
2
3
4
5
6
foreach (var item in root.Enrollees.Where(item => item.GoldMedal))
{
    report.ReportRows.Add(0, $"{item.RegistrationNumber}",
        $"{item.Surname}", $"{item.FirstName}", $"{item.LastName}",
        $"{item.BirthDay.ToShortDateString()}", $"{Helper.SpecialityById(item.IdSpeciality)}"); 
}
Вместо этого?
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
26.10.2019, 16:02 8
Цитата Сообщение от VladimirKazan Посмотреть сообщение
Что значит статический класс?
Это означает, что экземпляр статического класса создать нельзя, но можно использовать его поля и методы.
C#
1
2
3
4
5
6
foreach (var item in root.Enrollees.Where(item => item.GoldMedal)) 
{
  report.ReportRows.Add(0, $"{item.RegistrationNumber}",
                                        $"{item.Surname}", $"{item.FirstName}", $"{item.LastName}",
                                        $"{item.BirthDay.ToShortDateString()}", $"{Helper.SpecialityById(item.IdSpeciality)}");
}
В этом примере добавляются строки в отчёт.
А вызов этого фрагмента кода будет примерно таким:
C#
1
2
 var report = ReportsBuilder..GetEnrolleesWithGoldMedal(_root);
 ...
где _root - это корневой объект модели данных, а report будет использован для представления отчета пользователю
средствами формы ReportsForm().

Непосредственно к базе данных этот код не имеет отношения, но помогает ускорить разработку.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
27.10.2019, 08:55 9
Я просто должен сделать вывод отчётов с базы данных которая записана в sql по определённым параметрам (запросам sql) чтобы заполнялась. Что мне нужно в твоё коде заменить и где? Мне нужно кинуть запрос к базе данных и таблице и поставить определённый запрос sql(критерий) для заполнения, что поменять можешь обьяснить
0
1842 / 1184 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
27.10.2019, 12:18 10
VladimirKazan, вас интересует именно связывание WinForm и SQL ? БД создавать умеете? Таблицу в БД?
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
27.10.2019, 12:36 11
Цитата Сообщение от VladimirKazan Посмотреть сообщение
сделать вывод отчётов с базы данных которая записана в sql
Приведите пример своего кода, в котором Вы получаете набор данных из своей базы. Самый простой запрос.
А я, на основе этого кода, постараюсь показать, как выполнить привязку Вашего кода к показанному выше примеру вывода отчёта.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
29.10.2019, 13:39 12
Цитата Сообщение от ashsvis Посмотреть сообщение
Приведите пример своего кода, в котором Вы получаете набор данных из своей базы. Самый простой запрос.
А я, на основе этого кода, постараюсь показать, как выполнить привязку Вашего кода к показанному выше примеру вывода отчёта.
Я пока еще вывод данных не делал, это на ввод пользователей которые регистрируются, и как пример хочу чтобы вывел в отчете фио, имя, номер, майл всех кто зарегестрирован




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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace Primer
{
    public partial class Registration : Form
    {
        string connectionString = @"Data Source=VLADIMIR-PC;Initial Catalog=UserDB;Integrated Security=True";
 
 
        public Registration()
        {
            InitializeComponent();
        }
 
        private void Registration_Load(object sender, EventArgs e)
        {
 
        }
 
   
  
 
        private void buttonRegistration_Click(object sender, EventArgs e)
        {
            if (textBoxUserName.Text == "" || textBoxPassword.Text == "" || textBoxPassword2.Text == "" || textBoxFName.Text == "" || textBoxLName.Text == "" || textBoxNumber.Text == "" || textBoxMail.Text == "")
                MessageBox.Show("Заполните все строчки");
            else if (textBoxPassword.Text != textBoxPassword2.Text)
                MessageBox.Show("Пароли не совпадают");
            else
            {
                using (SqlConnection sqlCon = new SqlConnection(connectionString))
                {
                    sqlCon.Open();
                    SqlCommand sqlCmd = new SqlCommand("UserAdd", sqlCon);
                    sqlCmd.CommandType = CommandType.StoredProcedure;
                    sqlCmd.Parameters.AddWithValue("@FirstName", textBoxFName.Text.Trim());
                    sqlCmd.Parameters.AddWithValue("@LastName", textBoxLName.Text.Trim());
                    sqlCmd.Parameters.AddWithValue("@Number", textBoxNumber.Text.Trim());
                    sqlCmd.Parameters.AddWithValue("@Mail", textBoxMail.Text.Trim());
                    sqlCmd.Parameters.AddWithValue("@UserName", textBoxUserName.Text.Trim());
                    sqlCmd.Parameters.AddWithValue("@Password", textBoxPassword.Text.Trim());
                    sqlCmd.ExecuteNonQuery();
                    MessageBox.Show("Registration is successfull");
                    Clear();
                    Close();
 
                }
            }
            
        }
 
 
 
        
 
       
    
 
    
    }
}
Добавлено через 2 минуты
Цитата Сообщение от Enifan Посмотреть сообщение
VladimirKazan, вас интересует именно связывание WinForm и SQL ? БД создавать умеете? Таблицу в БД?
Да, интересуют именно связь. Проверки выводы, изменение, удаление и др. Создавать умею.
0
1842 / 1184 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
29.10.2019, 14:21 13
VladimirKazan, Хорошо, вот вам пример того, как я работаю с SQL. Это одна из возможных реализаций соединения WinForm и SQL. Она подойдет для того, чтобы писать небольшое кол-во запросов в БД. Есть и другой вариант, он для тех, кто пишет запросы сотнями и тысячами, увы той реализации я пока не знаю, сам ищу ответы.
Если все-таки данная реализация вас устроит для начала, то спрашивайте то, что не поймете. Ибо объяснять абсолютно все - это тонны текста. Тут удобно использовать отдельный статический класс, а из Form делать вызовы. И один совет - слишком много "проблем" при конвертации типов, извлечении типов и тд. Увы, это нормально для данных классов.
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace User
{
    static class Sql
    {
        // Данные для SQL
        static SqlConnection connect;
        static SqlCommand command;
        static SqlDataReader reader;
 
        static Sql()
        {
            // Подключение к SQL
            connect = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\HandBook\DataBase\DataBase\Database.mdf;Integrated Security=True");
            connect.Open();
 
            // Класс для запросов к SQL
            command = new SqlCommand();
            command.Connection = connect;
        }
 
        // Загружается пользовательский национальный язык (сейчас только id = 1)
        static public string LoadUserNationalLanguage()
        {
            command.CommandText = "SELECT [language] FROM [users] WHERE [id] = 1";
            return command.ExecuteScalar().ToString();
        }
 
        static public string LoadUserCssStyle()
        {
            command.CommandText = "SELECT [style] FROM [users] WHERE [id] = 1";
            return command.ExecuteScalar().ToString();
        }
 
        static public void GetInfoHtmlMaxMin(ref string max, ref string min, string userNationalLanguage, int id)
        {
            command.CommandText = "SELECT [infoMax], [infoMin] FROM [" + userNationalLanguage + "] WHERE [id] = @id";
            command.Parameters.Add(new SqlParameter("@id", id));
            reader = command.ExecuteReader();
            while (reader.Read())
            {
                max = reader.GetString(0);
                min = reader.IsDBNull(1) ? null : reader.GetString(1);
            }
            command.Parameters.Clear();
            reader.Close();
        }
 
        static public string SelectTitle(string userNationalLanguage, int id)
        {
            command.CommandText = "SELECT [title] FROM [" + userNationalLanguage + "] WHERE [id] = @id";
            command.Parameters.Add(new SqlParameter("@id", id));
            string title = command.ExecuteScalar().ToString();
            command.Parameters.Clear();
            return title;
        }
 
        static public void SaveUserNationalLanguage(string userNationalLanguage)
        {
            command.CommandText = "UPDATE [users] SET [language] = @language WHERE [id] = 1";
            command.Parameters.Add(new SqlParameter("@language", userNationalLanguage));
            command.ExecuteNonQuery();
            command.Parameters.Clear();
        }
 
        static public int GetCountList(int newParentId)
        {
            command.CommandText = "SELECT COUNT(*) FROM [tree] WHERE [parentId] = @newParentId";
            command.Parameters.Add(new SqlParameter("@newParentId", newParentId));
            int count = Convert.ToInt32(command.ExecuteScalar().ToString());
            command.Parameters.Clear();
            return count;
        }
 
        static public void SetList(int id, int count)
        {
            command.CommandText = "UPDATE [tree] SET[list] = @count WHERE [id] = @id";
            command.Parameters.Add(new SqlParameter("@count", count));
            command.Parameters.Add(new SqlParameter("@id", id));
            command.ExecuteNonQuery();
            command.Parameters.Clear();
        }
 
        // Заполняется ComboBox национальных языков
        static public void FillComboboxNationalLanguage(ComboBox comboBoxNationalLanguage)
        {
            command.CommandText = "SELECT [name] FROM [nationalLanguage]";
            reader = command.ExecuteReader();
            while (reader.Read())
            {
                comboBoxNationalLanguage.Items.Add(reader["name"].ToString());
            }
            reader.Close();
        }
 
        static public string FullNameNationalLanguage(string abbrNationalLanguage)
        {
            command.CommandText = "SELECT [name] FROM [nationalLanguage] WHERE [abbr] = @abbrNationalLanguage";
            command.Parameters.Add(new SqlParameter("@abbrNationalLanguage", abbrNationalLanguage));
            string str = command.ExecuteScalar().ToString();
            command.Parameters.Clear();
            return str;
        }
 
        // Ищется одно слово в SQL
        static public string ChangeWord(string edit, ref bool successSearch)
        {
            command.CommandText = "SELECT * FROM [words] WHERE [before] = @edit";
            command.Parameters.Add(new SqlParameter("@edit", edit));
            reader = command.ExecuteReader();
            // Если слово не найдено в SQL
            if (reader.HasRows == false)
            {
                successSearch = false;
                MessageBox.Show("Слово '" + edit + "' не найдно");
                reader.Close();
                command.Parameters.Clear();
                //AddNewWord(edit);
            }
            else
            {
                while (reader.Read())
                {
                    string before = reader.IsDBNull(1) ? null : reader.GetString(1);
                    bool? correct = reader.IsDBNull(2) ? null : (bool?)reader.GetBoolean(2);
 
                    // Слово еще не отредактировано
                    // Или оно является некорректным
                    if (correct == null || correct == false)
                    {
                        successSearch = false;
                        command.Parameters.Clear();
                        reader.Close();
                        return "";
                    }
                    command.Parameters.Clear();
                    reader.Close();
                    // Отредактированное слово
                    return before;
                }
            }
            return "";
        }
    }
}
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
29.10.2019, 15:08 14
Цитата Сообщение от VladimirKazan Посмотреть сообщение
хочу чтобы вывел в отчете фио, имя, номер, майл всех кто зарегестрирован
Вот проект с привязками для Вашего случая.
ReportSample.zip
Из Вашей базы данных заполните объекты модели здесь:
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
using Model;
using Reports;
using System;
using System.Windows.Forms;
 
namespace ReportSample
{
    public partial class Form1 : Form
    {
        Root _root;
 
        public Form1()
        {
            InitializeComponent();
            _root = new Root();
 
            // создание тестовых записей
            // вместо них получите свои данные запросом SQL из базы данных и заполните свойства объектов:
 
            _root.Users.Add(new User()
            {
                FirstName = "Вася",
                LastName = "Пупкин",
                Number = "1",
                UserName = "Pupkin",
                Password = "123",
                Mail = "pupkin@mail.ru"
            });
            _root.Users.Add(new User()
            {
                FirstName = "Остап",
                LastName = "Бендер",
                Number = "2",
                UserName = "Bender",
                Password = "456",
                Mail = "bender@mail.ru"
            });
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // показываем окно отчета
            new ReportsForm(ReportsBuilder.GetUsers(_root)).ShowDialog();
        }
    }
}
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
29.10.2019, 22:49 15
Цитата Сообщение от ashsvis Посмотреть сообщение
Вот проект с привязками для Вашего случая.
Вложение 1078915
Из Вашей базы данных заполните объекты модели здесь:
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
using Model;
using Reports;
using System;
using System.Windows.Forms;
 
namespace ReportSample
{
    public partial class Form1 : Form
    {
        Root _root;
 
        public Form1()
        {
            InitializeComponent();
            _root = new Root();
 
            // создание тестовых записей
            // вместо них получите свои данные запросом SQL из базы данных и заполните свойства объектов:
 
            _root.Users.Add(new User()
            {
                FirstName = "Вася",
                LastName = "Пупкин",
                Number = "1",
                UserName = "Pupkin",
                Password = "123",
                Mail = "pupkin@mail.ru"
            });
            _root.Users.Add(new User()
            {
                FirstName = "Остап",
                LastName = "Бендер",
                Number = "2",
                UserName = "Bender",
                Password = "456",
                Mail = "bender@mail.ru"
            });
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // показываем окно отчета
            new ReportsForm(ReportsBuilder.GetUsers(_root)).ShowDialog();
        }
    }
}


Что то не могу к нему подвести
Вот код видимо, толи на каждый не так подвожу или нехватает чего то



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
public Form1()
        {
            InitializeComponent();
            _root = new Root();
            // создание тестовых записей
 
 
                string connectString = "Data Source=VLADIMIR-PC;Initial Catalog=UserDB;" +
            "Integrated Security=true;";
 
                SqlConnection myConnection = new SqlConnection(connectString);
 
                myConnection.Open();
 
                string query = "SELECT * FROM TableUser ORDER BY UserID";
 
                SqlCommand command = new SqlCommand(query, myConnection);
 
                SqlDataReader reader = command.ExecuteReader();
                _root.Users.Add(new User()
                {
                while (reader.Read())
                {
                
                FirstName = "(myReader["FirstName"].ToString());",
                LastName = "(myReader["LastName"].ToString());",
                Number = "(myReader["Number"].ToString());",
                UserName = "(myReader["UserName"].ToString());",
                Password = "(myReader["Password"].ToString());",
                Mail = "(myReader["Mail"].ToString());"
                }
                
                reader.Close();
 
                myConnection.Close();
        });
 
        }
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
30.10.2019, 01:27 16
уххх, месиво из некомпетенций
на вскидку, везде(молчать внутренний "Порутчик Ржевский") убери внешние скобки, они лишние,
Цитата Сообщение от VladimirKazan Посмотреть сообщение
_root.Users.Add(new User()
перенеси в цикл, и там тоже разберись со скобками,
фигурные скобки тоже гуляют.
ты вапче понимаешь что пытаешься сделать? мы не на экзамене, отвечай как есть...
З.Ы. "это и так видно"...
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
30.10.2019, 07:51 17
Цитата Сообщение от VladimirKazan Посмотреть сообщение
Что то не могу к нему подвести
Нужно как-то так:
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
public Form1()
{
    InitializeComponent();
    _root = new Root();
    // создание тестовых записей
    string connectString = "Data Source=VLADIMIR-PC;Initial Catalog=UserDB;" +
                                     "Integrated Security=true;";
    var myConnection = new SqlConnection(connectString);
    myConnection.Open();
    var query = "SELECT * FROM TableUser ORDER BY UserID";
    var command = new SqlCommand(query, myConnection);
    var reader = command.ExecuteReader();
    while (reader.Read())
    {
         _root.Users.Add(new User()
           {
             FirstName = reader["FirstName"].ToString(),
             LastName = reader["LastName"].ToString(),
             Number = reader["Number"].ToString(),
             UserName = reader["UserName"].ToString(),
             Password = reader["Password"].ToString(),
             Mail = reader["Mail"].ToString()
           }
         );
    }
    reader.Close();
    myConnection.Close();
}
1
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 18
30.10.2019, 17:09 18
Цитата Сообщение от Diamante Посмотреть сообщение
уххх, месиво из некомпетенций
на вскидку, везде(молчать внутренний "Порутчик Ржевский") убери внешние скобки, они лишние, перенеси в цикл, и там тоже разберись со скобками,
фигурные скобки тоже гуляют.
ты вапче понимаешь что пытаешься сделать? мы не на экзамене, отвечай как есть...
З.Ы. "это и так видно"...

Если бы знал то не спрашивал бы

ashsvis, Спасибо большое за помощь!
Добавлено через 3 минуты
0
30.10.2019, 17:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2019, 17:09
Помогаю со студенческими работами здесь

Выполнение хранимой процедуры sql в windows forms C#
Здравствуйте ! помогите люди добрые:) подскажите как выполнить хранимую процедуру sql в windows...

INSERT INTO по внешним ключам SQL C# Windows Forms
как создать запрос insert into ,update , чтобы добавить данные в 3 таблицы связанные внешним ключём...

Возможно ли импортировать базу данных из Microsoft SQL 2016 в Microsoft SQL 2014?
Ребят помогите плиз.. Возможно ли импортировать базу данных из Microsoft SQL 2016 в Microsoft SQL...

Установка microsoft sql server 2008 на windows 7.
Система windows 7 x86 ultimate. Ставил VS 2010 и как его дополнительный компонент sql server 2008,...


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

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