Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
1

Добавление записи в datagridview через хранимую процедуру

17.04.2016, 17:41. Показов 3055. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток тестирую уже полдня возможность добавления записи в datagridview - понял, что проще организовать все в хранимой процедуре - но студия ругается.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE insert_train
        (
    @kt int OUTPUT,
    @dt date,
    @km nchar=(3),
    @tt nchar=(3),
    @hm nchar=(3),
    @hs nchar=(3)    
    )
    
AS
    insert into Байк (Код тренировки, Дата тренировки, Километраж, Продолжительность, ЧСС МАКС, ЧСС СРЕДН)
    values (@kt,@dt,@km,@tt,@hm,@hs)
    Select * FROM Байк
Смысла добавлять данные через другие элементы управления ( textBox) не вижу, гораздо удобднее было бы добавлять, вводя данные непосредственно в самом datagridview.
p.s проект и наработки прилагаются
Вложения
Тип файла: rar test.rar (264.2 Кб, 4 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2016, 17:41
Ответы с готовыми решениями:

Добавление записи DataGridView
Здравствуйте, может кто нибудь подсказать, как исправить добавление записи, а то записи повторяются...

Запрос на добавление в DataGridView записи (бд Access)
У меня не получается создать запрос на добавление в datagridview дробного числа из textBox(кнопка...

Добавление данных в DataGridView через textbox
У меня есть две формы (FrmZakazBayer,FrmZakazFarm). На FrmZakazBayer есть пять textbox. На...

Добавление нескольких чисел через пробел в datagridview
Здравствуйте! Как можно добавить несколько чисел в строку в datagridview. Если добавить одну...

13
14 / 13 / 6
Регистрация: 21.01.2015
Сообщений: 150
18.04.2016, 01:32 2
Я прошу прощения, а это разве не делфи?
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
18.04.2016, 10:29  [ТС] 3
нет, не дэлфи это вы по синтаксису процедуры так решили? ( это я пытаюсь встроенную процедуру организовать, но на нее по синтаксису ругается студия).
0
Эксперт .NETАвтор FAQ
10413 / 5143 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
18.04.2016, 16:24 4
Лучший ответ Сообщение было отмечено Даценд как решение

Решение

EvilSky,
1) Зачем вам хранимка? Она у вас ничего не делает, просто сохраняет данные. Ровно тоже самое можно сделать просто через SQL INSERT.
2) Вы хранимку прямо в cs файле пишите? Хранимки нужно создавать либо в SQL Server Management Studio, либо вбивать как строку и затем выполнять через SqlCommand.ExecuteNonQuery.
3) Почему бы вам не использовать стандартные средства ADO? Загружать данные в DataSet, затем присоеднять DGV к датасету через биндинг. DataSet + DGV хорошо работают в паре. Для сохранения изменений - можно использовать DataAdapter. Лично я датасеты не люблю, но если вы начинающий, то через них делать проще всего. В любом случае, хранимка вам ничего не даст.

Цитата Сообщение от kpNemo Посмотреть сообщение
Я прошу прощения, а это разве не делфи?
Это Transact-SQL.
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
19.04.2016, 22:50  [ТС] 5
Понял - я думал, что иначе запрос никак не выполнить - только через процедуру

Добавлено через 23 часа 23 минуты
Однако как организовать ваш 3-й пункт? Я лишь освоил допотопное отображение инфы с таблиц dataGrdview'om

Добавлено через 33 минуты
Логически думаю так, но в программе ничего вроде как не дает =/
C#
1
2
3
4
5
6
7
8
9
 DataSet ds;
        SqlDataAdapter adapter;
        void func(string d1, string d2)
                
        {
            ds.Tables[0].Rows.Add(d1, d2);
            adapter.Update(ds.Tables[0]);
            dataGridView1.DataSource = ds.Tables[0];
        }
0
Эксперт .NETАвтор FAQ
10413 / 5143 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
20.04.2016, 09:56 6
Лучший ответ Сообщение было отмечено EvilSky как решение

Решение

Цитата Сообщение от EvilSky Посмотреть сообщение
Однако как организовать ваш 3-й пункт?
Вот простейший пример с чтением таблицы из 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
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace WindowsFormsApplication339
{
    public partial class Form1 : Form
    {
        private SqlConnection connection;
        private DataSet dataSet;
        private SqlDataAdapter adapter;
 
        public Form1()
        {
            InitializeComponent();
 
            //create connection to SQL server
            connection = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
            connection.Open();
 
            //create dataset
            dataSet = new DataSet();
 
            //create adapter
            adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand("SELECT CustomerID, CompanyName FROM Customers", connection);
            
            adapter.InsertCommand = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) Values(@CustomerID, @CompanyName)", connection);
            adapter.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
            adapter.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 40, "CompanyName");
 
            adapter.UpdateCommand = new SqlCommand("UPDATE Customers SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID", connection);
            adapter.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
            adapter.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 40, "CompanyName");
 
 
            //read table Customers from DB to DataSet
            adapter.Fill(dataSet, "Customers");
 
            //Create DGV and assign DataTable
            var dgv = new DataGridView {Parent = this, Dock = DockStyle.Fill, DataSource = dataSet.Tables["Customers"]};
        }
 
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
 
            //save changes when form is closing
            adapter.Update(dataSet.Tables["Customers"]);
        }
    }
}
Добавление записи в datagridview через хранимую процедуру


Используется стандартная база Northwind из SQLEXPRESS.
Для наглядности примера я опустил такие вещи как обработка ошибок, закрытие коннекта, разнос логики по слоям и т.д.
Сохранение изменений в таблице происходит при закрытии формы.
1
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
20.04.2016, 21:48  [ТС] 7
Сделал по аналогии с вашим кодом - вот только при закрытии - данные не сохраняются:
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
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace AutoLotConnectedLayer
{
    public partial class Form1 : Form
    {
        private SqlConnection connection;
        private DataSet dataSet;
        private SqlDataAdapter adapter;
 
        public Form1()
        {
            InitializeComponent();
 
            //create connection to SQL server
            connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Сергей\Desktop\test\test\tables.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            connection.Open();
 
            //create dataset
            dataSet = new DataSet();
 
            //create adapter
            adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand("SELECT Кодтренировки, Дататренировки FROM Байк", connection);
 
            adapter.InsertCommand = new SqlCommand("INSERT INTO Байк (Кодтренировки Дататренировки) Values(@tID, @dt)", connection);
            adapter.InsertCommand.Parameters.Add("@tID", SqlDbType.Int, 3, "Кодтренировки");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 5, "Дататренировки");
           
            
            adapter.UpdateCommand = new SqlCommand("UPDATE Байк SET Кодтренировки = @tID WHERE Дататренировки = @dt", connection);
           
            adapter.InsertCommand.Parameters.Add("@tID", SqlDbType.Int, 3, "Кодтренировки");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 5, "Дататренировки");
           
            //read table Customers from DB to DataSet
            adapter.Fill(dataSet, "Байк");
 
            //Create DGV and assign DataTable
            var dgv = new DataGridView { Parent = this, Dock = DockStyle.Fill, DataSource = dataSet.Tables["Байк"] };
        }
 
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
 
            //save changes when form is closing
            adapter.Update(dataSet.Tables["Байк"]);
        }
    }
}
0
Эксперт .NETАвтор FAQ
10413 / 5143 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
21.04.2016, 10:56 8
Цитата Сообщение от EvilSky Посмотреть сообщение
данные не сохраняются
Обратите внимание на SQL запрос обновления данных:
SQL
1
UPDATE Байк SET Кодтренировки = @tID WHERE Дататренировки = @dt
Этот код у вас берет Дататренировки в качестве ключевого поля и заносит новое значение Кодтренировки для этой даты. Соотвественно, этот код принимает изменения только для поля Кодтренировки и по ключу Дататренировки.
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
22.04.2016, 11:24  [ТС] 9
Я так понимаю, на русском он не хочет принимать таблицы - т.к. ради интереса перевел в англ. поля таблицы - все шуршит
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
22.04.2016, 12:22  [ТС] 10
Однако, перевел всю таблицу в англ. - все равно ошибка при закрытии, видимо, ваш комментарий про UPDATE - я не понял =(.... но в таблицу с 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace AutoLotConnectedLayer
{
    public partial class Form1 : Form
    {
        private SqlConnection connection;
        private DataSet dataSet;
        private SqlDataAdapter adapter;
 
        public Form1()
        {
            InitializeComponent();
 
            //create connection to SQL server
            connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Сергей\Desktop\test\test\tables.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            connection.Open();
 
            //create dataset
            dataSet = new DataSet();
 
            //create adapter
            adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand("SELECT codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV FROM bikes", connection);
 
            adapter.InsertCommand = new SqlCommand("INSERT INTO bikes (codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV) Values(@cT, @dT, @km, @dM, @hM, @hA)", connection);
            adapter.InsertCommand.Parameters.Add("@cT", SqlDbType.Int, 3, "codeTrenirovki");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 1, "dateTrenirovki");
            adapter.InsertCommand.Parameters.Add("@km", SqlDbType.NChar, 3, "Kilometrag");
            adapter.InsertCommand.Parameters.Add("@dM", SqlDbType.NChar, 3, "Prodolgitelnost");
            adapter.InsertCommand.Parameters.Add("@hM", SqlDbType.NChar, 3, "heartrateMAX");
            adapter.InsertCommand.Parameters.Add("@hA", SqlDbType.NChar, 3, "heartrateAV");
           
            adapter.UpdateCommand = new SqlCommand("UPDATE  SET codeTrenirovki = @cT WHERE Kilometrag = @km", connection);
           
            adapter.InsertCommand.Parameters.Add("@cT", SqlDbType.Int, 3, "codeTrenirovki");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 1, "dateTrenirovki");
            adapter.InsertCommand.Parameters.Add("@km", SqlDbType.NChar, 3, "Kilometrag");
            adapter.InsertCommand.Parameters.Add("@dM", SqlDbType.NChar, 3, "Prodolgitelnost");
            adapter.InsertCommand.Parameters.Add("@hM", SqlDbType.NChar, 3, "heartrateMAX");
            adapter.InsertCommand.Parameters.Add("@hA", SqlDbType.NChar, 3, "heartrateAV");
           
            //read table Customers from DB to DataSet
            adapter.Fill(dataSet, "bikes");
 
            //Create DGV and assign DataTable
            var dgv = new DataGridView { Parent = this, Dock = DockStyle.Fill, DataSource = dataSet.Tables["bikes"] };
        }
 
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
 
            //save changes when form is closing
            adapter.Update(dataSet.Tables["bikes"]);
        }
    }
}
Вложения
Тип файла: rar AutoLotConnectedLayer.rar (350.7 Кб, 2 просмотров)
0
Эксперт .NETАвтор FAQ
10413 / 5143 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
22.04.2016, 18:27 11
Цитата Сообщение от EvilSky Посмотреть сообщение
"UPDATE SET codeTrenirovki = @cT WHERE Kilometrag = @km"
Вы этот запрос с потолка берете?
Почитайте про синтаксис и семантику команды UPDATE.
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
22.04.2016, 22:55  [ТС] 12
Да, вроде как, понял что к чему и для чего) но не поддается изменению при закрытии (
C#
1
 adapter.UpdateCommand = new SqlCommand("UPDATE bikes SET codeTrenirivki = @cT, dateTrenirovki= @dT, Kilometrag= @km, Prodolgitelnost= @dM, heartrateMAX= @hM, heartrateAV= @hA", connection);
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
24.04.2016, 22:07  [ТС] 13
Не поддается моему кунг-фу... в чем может быть невнимательность?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    adapter.SelectCommand = new SqlCommand("SELECT codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV FROM bikes", connection);
 
            adapter.InsertCommand = new SqlCommand("INSERT INTO bikes (codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV) Values(@cT, @dT, @km, @dM, @hM, @hA)", connection);
            adapter.InsertCommand.Parameters.Add("@cT", SqlDbType.Int, 3, "codeTrenirovki");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 1, "dateTrenirovki");
            adapter.InsertCommand.Parameters.Add("@km", SqlDbType.NChar, 3, "Kilometrag");
            adapter.InsertCommand.Parameters.Add("@dM", SqlDbType.NChar, 3, "Prodolgitelnost");
            adapter.InsertCommand.Parameters.Add("@hM", SqlDbType.NChar, 3, "heartrateMAX");
            adapter.InsertCommand.Parameters.Add("@hA", SqlDbType.NChar, 3, "heartrateAV");
 
            adapter.UpdateCommand = new SqlCommand("UPDATE bikes SET codeTrenirovki = @cT, dateTrenirovki= @dT, Kilometrag= @km, Prodolgitelnost= @dM, heartrateMAX= @hM, heartrateAV= @hA", connection);
            adapter.InsertCommand.Parameters.Add("@cT", SqlDbType.Int, 3, "codeTrenirovki");
            adapter.InsertCommand.Parameters.Add("@dt", SqlDbType.Date, 1, "dateTrenirovki");
            adapter.InsertCommand.Parameters.Add("@km", SqlDbType.NChar, 3, "Kilometrag");
            adapter.InsertCommand.Parameters.Add("@dM", SqlDbType.NChar, 3, "Prodolgitelnost");
            adapter.InsertCommand.Parameters.Add("@hM", SqlDbType.NChar, 3, "heartrateMAX");
            adapter.InsertCommand.Parameters.Add("@hA", SqlDbType.NChar, 3, "heartrateAV");
Вложения
Тип файла: rar AutoLotConnectedLayer.rar (351.2 Кб, 3 просмотров)
0
3 / 3 / 2
Регистрация: 17.11.2014
Сообщений: 194
25.04.2016, 19:32  [ТС] 14
Обновление работает, а вот при закрытии все рано ругается... Проверил Код вставки: [CSHARPINSERT INTO bikes (codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV) Values(@cT, @dT, @km, @dM, @hM, @hA)][/CSHARP] - в конструкторе добавляет все, но при закрытии - ШАЙТАН

Добавлено через 1 минуту
[QUOTE=EvilSky;9065498]Обновление работает, а вот при закрытии все рано ругается... Проверил Код вставки:
C#
1
INSERT INTO bikes (codeTrenirovki, dateTrenirovki, Kilometrag, Prodolgitelnost, heartrateMAX, heartrateAV) Values(@cT, @dT, @km, @dM, @hM, @hA)
Добавлено через 19 часов 51 минуту
мда... вообщем обычная невнимательность - вот эти строки были скопированы со вставки, а дальше не подозревал о своей ошибке... Вообщем заменить :
C#
1
2
3
4
5
6
7
8
adapter.UpdateCommand = new SqlCommand("UPDATE bikes SET codeTrenirovki = @cT, dateTrenirovki= @dT, Kilometrag= @km, Prodolgitelnost= @dM, heartrateMAX= @hM, heartrateAV= @hA", connection);
 
            adapter.UpdateCommand.Parameters.Add("@cT", SqlDbType.Int, 3, "codeTrenirovki");
            adapter.UpdateCommand.Parameters.Add("@dt", SqlDbType.Date, 1, "dateTrenirovki");
            adapter.UpdateCommand.Parameters.Add("@km", SqlDbType.NChar, 3, "Kilometrag");
            adapter.UpdateCommand.Parameters.Add("@dM", SqlDbType.NChar, 3, "Prodolgitelnost");
            adapter.UpdateCommand.Parameters.Add("@hM", SqlDbType.NChar, 3, "heartrateMAX");
            adapter.UpdateCommand.Parameters.Add("@hA", SqlDbType.NChar, 3, "heartrateAV");
И все заработает. Storm23
0
25.04.2016, 19:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2016, 19:32
Помогаю со студенческими работами здесь

DatagridView добавление данных через кнопку в другой форме
Как добавить в datagridview данные через кнопку в другой форме,с combobox и domainupdown

DatagridView добавление данных через кнопку в другой форме
Как добавить в datagridview данные из другой формы и через кнопку? ----------------------------...

Добавление записи в hosts через TextBox
Мне нужно внести строчки в хостс чтоб блочил сайты чтобы было удобнее я хочу сделать не через...

Добавление данных через хранимую процедуру
Здравствуйте, есть 1 вопрос. Как заполинть базу данных из С# с использованием хранимых процедур(из...


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

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