Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
1

Добавление записи из Datagridview в базу данных mysql

20.04.2014, 18:05. Просмотров 4428. Ответов 51
Метки нет (Все метки)

Друзья, хочу добавить данные с датагрида в базу данных но выдает ошибку ссылка на объект не указывает на экземпляр объекта, что я делаю не правильно?Обращаюсь к записи через класс бд коннектиться тока вот со вставкой косяк((((((((
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void toolStripButton2_Click(object sender, EventArgs e)
            { // добавление записей в таблицу
               string lastvo = sqlClass.getIndex("SELECT MAX(Id_company) AS last fROM company");
     
                for (int l = 0; l < dataGridView1.RowCount; l++)
                {
                  string insert = "insert into company (Id_company, address, nachalo_sotrudnichestva, vozmojnost_adaptacii,  korporativ_obuchenie, otzyvy, chernyi_list, BIN_RNN, primechanie, nalichie_dogovorov, opyt_sotrudnichesva, kolich_obuch) " +
                          "values ('" + lastvo + "', '" + dataGridView1.Rows[l].Cells[1].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[2].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[3].Value.ToString() + "', '" +
                                    dataGridView1.Rows[l].Cells[4].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[5].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[6].Value.ToString() + "', '" +
                                   dataGridView1.Rows[l].Cells[7].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[8].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[9].Value.ToString() +
                                   "', '" + dataGridView1.Rows[l].Cells[10].Value.ToString() + "', '" + dataGridView1.Rows[l].Cells[11].Value.ToString() + "')";
                        sqlClass.InsertUpdate(insert);
     
                    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 18:05
Ответы с готовыми решениями:

Добавление записи в базу данных mysql
Всем привет. Мне нужно объединить 3 таблицы, я их объединила. Вот моя проблема...

Добавление записи в базу данных
такой вопрос, как додавить новую запись в базу данных с второй формы?? даные...

Добавление записи в базу данных MSSQL
Добрый вечер, возникла проблема при добавлении записи в БД. У меня есть две...

Добавление записи в базу данных Access
База данных-Access. Необходимо добавить запись в базу Clients(открывается по...

MySQL datagridview добавление данных в БД только кнопкой
Здравствуйте, уважаемые. Вывожу таблицу из БД в datagridview.Разрешено...

51
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 09:45  [ТС] 41
а заполнение как делать ? если сделаю как и раньше делал
C#
1
2
3
   string zayav = "INSERT INTO zayavka (id_zayavki, name_kompleks, tema_obucheniya, period_obucheniya_S, period_obucheniya_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES ('"+ label11.Text + "', '" +comboBox4.Text + "', '" +
                    textBox1.Text + "', '" + dateTimePicker3.Text + "', '" + dateTimePicker2.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + dateTimePicker4.Text + "')";
            sqlClass.InsertUpdate(zayav);
а в классе было
C#
1
2
3
4
5
6
7
8
9
10
11
using (connection)
            {
                   
                MySqlCommand cmd = new MySqlCommand(SQLcommand, connection);
                cmd.Connection = connection;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = SQLcommand;
                this.OpenConnection();
                cmd.ExecuteNonQuery();
                this.CloseConnection();
            }
то ваш update будет работать или мне заполнять как то по другому
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
22.04.2014, 09:54 42
Ты определись, как вводишь данные, если через Grid, то там всё просто и минимум программирования. Если через TextBox'ы, то их надо привязать к соответствующим полям DataTable.

Добавлено через 4 минуты
Суть в том, что MySqlDataAdapter и MySqlCommandBuilder позволяют скрыть SQL-команды и не задавать их нигде явно, не составлять вручную. Но для этого и работать надо через цепочку Соединение - Адаптер - DataSet - таблицы в DataSet - элементы управления (DataGridView и прочие). Если вместо или кроме DataGridView исользовать TextBox, то там нужна ещё прокладка между DataTable и TextBox - Binding.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 10:09  [ТС] 43
вообще это форма ввода, в текст боксы я заполняю поля а потом после нажатия на кнопку сохранить отображаю в датагиде и вот не знаю на каком этапе сохранять в базу.

Добавлено через 10 минут
вы говорили сюда поместить все эти билдеры?
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
namespace MySqlConn
{
    class MySqlClass
    {
        public MySqlConnection connection;
        public MySqlDataAdapter myDataAdapter;
        public DataSet myDataSet;
        private string server;
        private string dataBase;
        private string uID;
        private string password;
       public string SQLcommand;
        public MySqlClass()
        {
            Initialize();
       }
 
 
        public void Initialize()
        {
            myDataAdapter = new MySqlDataAdapter();
            myDataAdapter.SelectCommand = new MySqlCommand(SQLcommand, connection);
            MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter);
            myDataSet = new DataSet();
            myDataAdapter.Fill(myDataSet);
            
 
            server = "localhost";
            dataBase = "analyse";
            uID = "root";
            password = "password";
            string connectionString;
            connectionString = "SERVER=" + server + "; " + "DATABASE=" + dataBase + "; " +
                               "UID=" + uID + "; " + "PASSWORD=" + password;
            connection = new MySqlConnection(connectionString);
        }
 
        public bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        MessageBox.Show("Невозможно подключиться к серверу. Свяжитесь с администратором");
                        break;
                        //а эта фигня не работает.хотя должна зараза работать!!!!!
                    case 1045:
                        MessageBox.Show("");
                        break;
                }
                return false;
            }
        }
я поместил теперь обращаюсь с формы заполнения так:
C#
1
dataGridView1.DataSource = myDataSet.Tables["zayavka"];
а он говорит типа Warning 1 Field 'MySqlConn.MySqlClass.SQLcommand' is never assigned to, and will always have its default value null это он ругается на fill в инициализации
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
22.04.2014, 10:32 44
Вот эту строку
C#
1
yDataAdapter.SelectCommand = new MySqlCommand(SQLcommand, connection);
поменяй на
C#
1
yDataAdapter.SelectCommand = new MySqlCommand("select * from company", connection);
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 10:40  [ТС] 45
я его к нескольким таблицам применить хочу, поэтому я датасет и датаадаптер поместил в класс

Добавлено через 4 минуты
по идее для заполнения таблицы у меня есть такой метод
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  public void FillGrid(string SQLcommand, DataGridView dataGrid)
        {
            DataTable dt = null;
            using (connection)
            {
                connection.Open();
                using (MySqlCommand cmd = new MySqlCommand(SQLcommand, connection))
                {
                    MySqlDataAdapter da = new MySqlDataAdapter(SQLcommand, connection);
                    dt = new DataTable("TName");
                    da.Fill(dt);
                }
                connection.Close();
            }
            dataGrid.DataSource = dt;
        }
а когда я вставляю то использую
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void InsertUpdate(string SQLcommand)
        {
            using (connection)
            {
                   
                MySqlCommand cmd = new MySqlCommand(SQLcommand, connection);
                cmd.Connection = connection;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = SQLcommand;
                this.OpenConnection();
                cmd.ExecuteNonQuery();
                this.CloseConnection();
            }
        }
а когда удаляю
C#
1
2
3
4
5
6
7
8
9
  public void Delete(string SQLcommand)
        {
            if (this.OpenConnection() == true)
            {
                MySqlCommand command = new MySqlCommand(SQLcommand, connection);
                command.ExecuteNonQuery();
                this.CloseConnection();
            }
        }
тока вот вы видели результаты моего творчества я что то совсем запутался, ка кбудет правильнее использовать ваш метод, применяя не только к одной таблице и чтобы еще и допустим с полем ID получалось я ж его ищу и потом вставляю
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
22.04.2014, 10:45 46
Тогда передавай имя таблицы в Initialize() или храни его внутри класса
C#
1
yDataAdapter.SelectCommand = new MySqlCommand("select * from " + mytableName, connection);
Добавлено через 5 минут
Хорошо, если ты так любишь классы. Пусть класс соответствует таблице БД, тогда объяви в классе переменную string для хранения имени таблицы, а также переменную для DataAdapter. В конструкторе класса создавай адаптер и вызывай mysqlcommandbuilder.
А вот само соединение и DataSet должны быть созданы на уровне приложения и передаваться в конструктор готовыми.
Иначе у тебя каждый экземпляр класса начнёт создавать свои соединения и DataSet и всё запутается.
1
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 10:54  [ТС] 47
я переменные создал а вот с на уровне приложения можно я вам скину файл моего класса а вы его правильно сделаете, пожалуйста?MySqlClass.rar
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 16:14  [ТС] 48
дико извинясь ноя так и не понял, прошу помощи как сделать соединение и Dataset на уровне приложения? у меня соединение находиться в методах класса, и куды теперь его

Добавлено через 3 часа 33 минуты
Премного благодарен разобрался со всем!!! все пашет ейху, спасибо что помогли
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
22.04.2014, 16:26 49
Я просто был занят. И как сделал?
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 21:22  [ТС] 50
какты и написал подключил конэкш на уровне приложения и прописал датаадаптеры для каждой таблицы и потом обращался к ним из тех форм из которых надо=) а вообще мне кажется изначально с биндингом версия моей проги была лучше))) просто мне приходится тут вот таким образом делать чтоб разобраться как все работает, ОГРОМНОЕ ТЕБЕ СПАСИБО!!!!!!реально мне кажется я тебя достал со своими тупыми вопросами просто я новичок в этом.

Добавлено через 2 минуты
Кстат ( извиняюсь что не по теме, но решил воспользоваться случаем и спросить или это не в правилах форума? просто ты профи в своем деле решил обратиться именно к тебе) я тут решил подключить олап отчеты вернее мне сказали сделать их ну чтоб формировать отчеты какие надо пользователю, так вот в инете мало инфы про это, я в ms sql server делал как то их а тут даж без вариантов не знаю как их воять? мош подскажешь инфой или ссылочкой поделишься нужной?

Добавлено через 1 минуту
а может даже пример есть????
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
22.04.2014, 21:42 51
С OLAP не работал.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
22.04.2014, 21:50  [ТС] 52
эхх ну лян буду колесить по инету в поисках наживы(((
0
22.04.2014, 21:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 21:50

C# DataGridView - добавление в базу при редактировании датагрида
Помогите... есть база даных подключеная к датагриду все работает при запуске...

Добавление записи в базу
Наткнулся на проблему с реализацией добавления записи в бд access через...

Сохранить две таблицы в DataGridView в базу MySql
Привет, форумчане! Есть две таблицы, которые успешно выводятся в DataGridView с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru