Форум программистов, компьютерный форум, киберфорум
Наши страницы
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. Просмотров 4432. Ответов 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
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 18:11 2
На что именно указывает ошибка?

Добавлено через 26 секунд
И разве кавычки применяются для числовых полей?
1
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 18:25  [ТС] 3
На поля дата грида то есть выделяет вот этот код и пишет: ссылка на объект не указывает на экземпляр объекта
C#
1
2
3
4
5
6
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
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 18:27 4
Может у тебя не все Value заполнены?
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 18:34  [ТС] 5
не все заполнены в базе разрешены нулевые значения
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 18:35 6
Я имею в виду, что не все они преобразуются в строку через ToString().
Проверь какой тип у Value там, где не заполнено.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 18:41  [ТС] 7
хмм, там и data, text, tinyint, varchar, smallint, дело в том что они все не обязательные для заполнения но нужны!
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 18:47 8
Ты не понял. Я не про БД говорю, а про DataGrid, если там поле пустое, это ещё не значит, что ToString() выдаст тебе пустую строку. Тип Value проверь. Он может быть неопределённый.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 18:51  [ТС] 9
а как проверить его?
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 18:54 10
У тебя DataGrid вообще связан c DataTable или ты всё вручную заполняешь?

Добавлено через 3 минуты
В отладчике, например. Поставь точку останова на эту строку и смотри.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 19:06  [ТС] 11
Заполняю запросом из бд а дататэйбл кстати DataTable dt = null;
а как правильно сделть? я вот сделал такую штуку в классе
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;
        }
Добавлено через 7 минут
У меня акасса во как , а как правильно сделать?какое значение ему задать?
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;
        }
Добавлено через 1 минуту
Заполняю запросом из бд а дататэйбл кстати DataTable dt = null;
а как правильно сделть? я вот сделал такую штуку в классе
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;
        }
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 19:06 12
Объявляешь соединение, DataSet и Адаптер в заголовке класса формы. Загружаешь таблицу (или таблицы) в DataSet и назначаешь в DataGridView через DataSource. После этого редактирование идёт в самом DataGrid. Для записи изменений используешь DataAdapter (функцию Update()), настроив предварительно SQL команды Для Insert, Delete и Update.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 19:08  [ТС] 13
Заполняю запросом из бд а дататэйбл кстати DataTable dt = null;
а как правильно сделть? я вот сделал такую штуку в классе
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;
        }
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 19:13 14
Вот у тебя MySQLDataAdapter. Настрой ему SQL-команды для удаления, добавления и модификации. После чего можешь вызывать его функцию Update() и он сам все параметры заполнит и изменения запишет в базу.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 19:18  [ТС] 15
а если у меня dataseta нету, где его объявить в классе в начале или как.
Объявляешь соединение, DataSet и Адаптер в заголовке класса формы. - эт получается мне в классе прописать функцию обновления а потом с формы обращаться к ней?

Добавлено через 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
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
class MySqlClass
    {
        private MySqlConnection connection;
        private string server;
        private string dataBase;
        private string uID;
        private string password;
 
        public MySqlClass()
        {
            Initialize();
        }
 
        public void Initialize()
        {
            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;
            }
        }
 
        public bool CloseConnection()
        {
            try
            {
                connection.Close();
                return true;
            }
            catch (MySqlException ex)
            {
                //не знаю че придумать. пока что так будет
                MessageBox.Show(ex.Message);
                return false;
            }
        }
 
        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();
            }
        }
        
        public void Delete(string SQLcommand)
        {
            if (this.OpenConnection() == true)
            {
                MySqlCommand command = new MySqlCommand(SQLcommand, connection);
                command.ExecuteNonQuery();
                this.CloseConnection();
            }
        }
 
        public string SelectOnlyOne(string SQLcommand)
        {
            string cellValue = null;
            using (connection)
            {
                MySqlCommand showresult = new MySqlCommand(SQLcommand, connection);
                this.OpenConnection();
                if (showresult.ExecuteScalar() != null)
                cellValue = showresult.ExecuteScalar().ToString();
                this.CloseConnection();
            }
            return cellValue;
        }
 
        public void FillAndSave(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;
              
 }
     
 
        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;
        }
 
        public void FillComboBox(string SQLcommand, string TableField, ComboBox comboBox)
        {
            using (connection)
            {
                connection.Open();
                DataTable dt = null;
                using (MySqlCommand cmd = new MySqlCommand(SQLcommand, connection))
                {
                    MySqlDataAdapter da = new MySqlDataAdapter(SQLcommand, connection);
                    dt = new DataTable();
                    da.Fill(dt);
                }
                comboBox.DataSource = dt;
                comboBox.DisplayMember = TableField;
                connection.Close();
            }
        }
 
 
 
        public string getIndex(string command)
        {
            string ind = "";
 
            using (connection)
            {
                MySqlCommand showresult = new MySqlCommand(command, connection);
                this.OpenConnection();
                if (showresult.ExecuteScalar() != null)
                    ind = showresult.ExecuteScalar().ToString();
                this.CloseConnection();
            }
            return ind;
        }
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 19:23 16
В заголовке класса главной формы приложения.
У тебя Visual Studio?
Вот примерно так:
C#
1
2
3
4
    public partial class Form1 : Form
    {
        private OleDbConnection db_connection;
        private DataSet ds;
У тебя вместо OleDBConnection будет MySQL.

Добавлено через 3 минуты
MySQLClass - это что? Самодельный класс? Ну объяви в нём.

Добавлено через 1 минуту
Последовательность примерно такая:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  MySqlConnection myConn = new MySqlConnection(myConnection); 
  MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(); 
  myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery, myConn); 
  MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter); 
 
  myConn.Open(); 
 
  DataSet myDataSet = new DataSet(); 
  myDataAdapter.Fill(myDataSet, "Departments"); 
 
  //code to modify data in dataset here 
 
  //Without the MySqlCommandBuilder this line would fail 
  myDataAdapter.Update(myDataSet, "Departments"); 
 
  myConn.Close();
MySQLCommandBuilder создаёт все нужные SQL команды. Потом надо просто вызывать Update().
1
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 19:34  [ТС] 17
а что вписать вместо "Departments" вот в этом месте?
C#
1
myDataAdapter.Update(myDataSet, "Departments");
если я это засуну в класс?
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:04 18
Имя своей таблицы "company".
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 22:22  [ТС] 19
Извини тупанул с вопросом) у меня тут еще 1 косяк когда запросом вызывают заполнение датагрида записями он мне вставляет с хэдэрами таблицы из базы а я эти хэдэры про писал у себя так вот как сделать чтоб значения из запроса select *from table company отображались в строках прописанных мной хэдэрах. Значение автоматом добавлять колонки false стоит.
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:26 20
Не понял. Ты про заголовки колонок в DataGridView?
0
20.04.2014, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 22:26

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

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

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


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

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

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