kozmikadam Ответов: 1

Update excel : синтаксическая ошибка в инструкции UPDATE


Всем привет,

Я пытаюсь обновить файл excel. Я использовал oledb-соединение для чтения данных из excel, а теперь хочу использовать его для обновления данных.

Я могу импортировать данные из excel в datagridview. Так что если есть возможность обновить все данные из datagridview в excel, это было бы здорово. Я открыт для любых предложений.

Вот мой код :

OleDbConnection baglan = new OleDbConnection();
                            baglan.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + yeniDosya + "; Extended Properties = 'Excel 8.0;IMEX=1;'";
                            baglan.Open();
                            string sit = sheetadi;
                            sit = sit.TrimEnd('\'');
                            sit = sit.TrimStart('\'');
                            string shtsrg = sit + "K" + i + ":K" + i;
                            
                            string excel = String.Format("UPDATE {0} SET F1=" + dataGridView1.Rows[i].Cells[9].Value.ToString() + "", shtsrg);
                            MessageBox.Show(excel);
                            OleDbCommand cmd = new OleDbCommand(excel, baglan);
                            cmd.ExecuteNonQuery();



Позвольте мне объяснить просто :

yenidosya : это файлы Excel имя
sheetadi : это имя листов ( я беру его откуда-то еще )
В листади у меня есть "в начале и в конце". поэтому я подстригаю его
i - это номер моего столбца, и он может изменяться параметрически
с помощью shtsrg я хочу объединить имя листа и номер столбца ( это также имя моей таблицы )
Я использовал строку excel для того, чтобы сделать имя таблицы параметрическим

Я пытаюсь использовать этот метод :

Как обновить одну ячейку листа excel с помощью oledb-соединения, | The ASP.NET форумы[^]

Но это дает мне ошибку :
Syntax error in UPDATE statement 


Есть ли у вас какие-либо предположения о том , где находится синтаксическая ошибка или какой блок имеет проблему ?

Что я уже пробовал:

Как обновить одну ячейку листа excel с помощью oledb-соединения, | The ASP.NET форумы[^]

ZurdoDev

Просто посмотрите на sql и найдите его. Это нетрудно сделать.

1 Ответов

Рейтинг:
1

OriginalGriff

Нет. И мы не можем - мы понятия не имеем, как выглядит ваша команда обновления, потому что вы строите ее (плохо, но я приду к этому) из частей, которые нам недоступны: содержимое ячейки DataGridView и переменная.

Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!

Но не делай этого так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.


kozmikadam

Привет ,
Я не профессиональный программист. Поэтому я думаю, что это нормально - делать ошибки такого типа и учиться : что я не должен делать и почему. :)

Я также использую точки останова.
Я могу сказать, что строка excel такова : UPDATE 30187$K6:K6 SET F1=OK
Но когда я помещаю эту строку непосредственно в строку excel (без какого-либо параметрического содержимого), она выдает ту же ошибку.

И когда я попробовал точно так же, как по ссылке, я получил ту же ошибку.

Или у вас есть какие-то другие предложения по обновлению значения какой-то ячейки excel из datagridview ?

OriginalGriff

Предположив, что "30187" - это имя вашего листа, попробуйте процитировать значение и экранировать адрес:
UPDATE [30187$K6:K6] SET F1= 'OK'

kozmikadam

я тоже пробовал это:) все равно получил ошибку.

Michael_Davies

Обычно имена листов содержатся в одинарных кавычках try UPDATE '30187'$K6:K6 SET F1=OK

kozmikadam

привет, это все еще дает синтаксическую ошибку.

Но я перезагрузил свой компьютер, и теперь он не дал никакой ошибки для: UPDATE [30187$K6:K6] SET F1= 'OK', но теперь программа зависает. И это не в какой-то петле.

Michael_Davies

Почему вы используете ссылку на ячейку в названии листа, я предполагаю, что вы пытаетесь установить значение ячейки F1 в "OK", если это так, попробуйте:

Обновление '30187' SET F1= 'OK'

kozmikadam

Синтаксическая ошибка в запросе. Неполное предложение запроса.
Честно говоря, я понятия не имею. Я пробую это в первый раз. И изучите некоторые сообщения об этом. И нашел ссылку выше.

Michael_Davies

Есть пример, похожий на то, что вы пытаетесь сделать

http://stackoverflow.com/questions/18391924/updating-excel-sheet-using-oledb

string commandString = строка.Формат ("обновление [{0}${1}{2}:{1}{2}] SET F1=' {3}'", имя листа, столбец, строка, данные);

Кроме того, вам придется установить HDR=NO в строке подключения, см. ответ по ссылке, но вот соответствующий текст

Единственное различие, которое следует отметить здесь, - это "SET F1=' {3}'". Это установит ячейку, указанную Вами в вашем диапазоне, на то, что находится в переменной данных.
Обратите внимание на использование "F1". Это просто значение по умолчанию, которое используется, когда в строке подключения указано "HDR=NO", другими словами, нет заголовков столбцов или имен. Если бы у вас были заголовки столбцов, вы бы использовали их вместо F1. Здесь важно понимать, что F1 никак не соответствует ячейке F1.