Xttx
Мыслитель
(9003)
4 года назад
У тебя собирается:
INSERT INTO individ.Categorii VALUES ('int', 'str', 'str')
Приавильный синтаксис:
INSERT INTO individ.Categorii (column_name1, column_name2, column_name3) VALUES ('int', 'str', 'str')
И если я правильно понял, то в твоём случае, ты хочешь добавить три строчки, а не три столбца. А это вообще надо делать тремя запросами:
INSERT INTO individ.Categorii (CaTN) VALUES ('int')
INSERT INTO individ.Categorii (CaTN) VALUES ('str')
INSERT INTO individ.Categorii (CaTN) VALUES ('str')
Cska MoskvaПрофи (902)
4 года назад
Вот так выглядит файл txt импортируемый в datagridView и вот как выглядит dataGrid
Cska MoskvaПрофи (902)
4 года назад
И еще дело в том, что если убрать с txt вторую строку (int,str,str) то в ошибку впишется 3-я строчка
XttxМыслитель (9003)
4 года назад
Понятное дело. Я же написал почему и как должно - синтаксис же не правильный. Тебе вторую строчку в файле (она же первая в гриде) всё равно не надо парсить, т. к. это метаинформация - типы данных столбцов, а не сами данные. Начинай парсить со следующей строчки. Конечный запрос должен будет выглядеть так:
INSERT INTO individ.Categorii (CatId, CaTN, Descr) VALUES (1, 'lactate', 'Lapte,Cascaval etc')
Должно быть как-то так:
string q = "Insert into individ." + tableName + " (";
for (int col = 0; col < DG.Columns.Count; col++) q+= DG.Columns[col].HeaderText + ", ";
q = q.Substring(0, q.Length - 2) + ") VALUES (";
...
и дальше уже весь твой цикл по строчкам и столбцам
for (int i = 0; i < DG.Rows.Count; i++)
{
for (int j = 0; j < DG.Columns.Count; j++)
....
XttxМыслитель (9003)
4 года назад
Это совсем не то же самое. Это другая ошибка. Сравните запрос какой был и какой сейчас. Теперь там просто одна кавычка лишняя. Первый столбец не должен браться в кавычки, потому что это число. А сейчас там вообще одна закрывающая одинарная кавычка, без открывающей.
XttxМыслитель (9003)
4 года назад
Надо немного по другому цикл написать. Там всегда будет ровно три столбца? Тогда я бы не стал делать вложенный цикл по столбцам, а просто написал бы что-то типа:
q += "(" + DG.Rows[i].Cells[0].Value + ", '" + DG.Rows[i].Cells[1].Value + "', ')" + DG.Rows[i].Cells[2].Value + "'";
XttxМыслитель (9003)
4 года назад
Можно просто написать две строчки, которые я написал выше: одну для 3х столбцовой таблицы, и одну, почти такую же, для 5и столбцовой.
Циклом можно, но это только всё усложнит, а пользы никакой.
И, до кучи, вот эти две комманды должны выполнятся для каждой строки, т. е. внутри цикла, который перебирает строки. А не один раз после цикла:
cmd = new MySql.Data.MySqlClient.MySqlCommand(q, con);
cmd.ExecuteNonQuery();
вот код на создание таблицы:
string sql1 = "create table individ.Categorii(CatId int null, CaTN varchar(45) null, Descr varchar(45) null);";
var cmd1 = new MySql.Data.MySqlClient.MySqlCommand(sql1, con);
cmd1.ExecuteNonQuery();
код на экспорт из DataGrid в созданную таблицу:
string initial = "Insert into individ." + tableName + " values ('";
string q = "Insert into individ." + tableName + " values ('";
for (int i = 0; i < DG.Rows.Count; i++)
{
for (int j = 0; j < DG.Columns.Count; j++)
{
if (j != DG.Columns.Count - 1)
{
q += DG.Rows[i].Cells[j].Value + "', '";
}
else
{
q += DG.Rows[i].Cells[j].Value + "');";
}
}
cmd = new MySql.Data.MySqlClient.MySqlCommand(q, con);
cmd.ExecuteNonQuery();
}
return q;