Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
Guliash
93 / 93 / 14
Регистрация: 11.11.2010
Сообщений: 424
1

Запись из DataTable в файл Excel'я

22.02.2012, 18:30. Просмотров 4297. Ответов 8
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Excel Files (*.xls)|*.xls";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
 
                using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + saveFileDialog1.FileName + ";Extended Properties='Excel 8.0;HDR=Yes'"))
                {
                    conn.Open();
                    string sql ="CREATE TABLE [Sheet1$]([Тип устройства]string,[Фирма]string,[Серия]string,[Название]string,[Характеристика]string,[Цена]string)";
                    OleDbCommand cmd = new OleDbCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    for (int i = 0; i < DtSet.Tables["Excel"].Rows.Count; i++)
                    {
                        DataRow row = DtSet.Tables["Excel"].Rows[i];
                        sql = "Insert INTO [Sheet1$] ('Тип устройства) values(" + row[0].ToString() + ")";
                        cmd=new OleDbCommand(sql,conn);
                        cmd.ExecuteNonQuery();
                    }
                     
                }
 
            }
Выдаётся OLEDBException "Ошибка синтаксиса в инструкции INSERT INTO"
При этом файл с данными столбцами создаётся, правда не совсем идеально. Спереди добавляется апостроф ('Тип устройства, 'Фирма). А вот на cmd.ExecuteNonQyert в цикле ругается.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 18:30
Ответы с готовыми решениями:

Запись из DataTable в файл
Всем привет. Программа должна открывать DBF файл и выводить содержимое в DataGridView. Это я...

Как удалить запись из DataTable?
Как удалить запись из DataTable. Как её тупо удалить. DataRow.Delete(); DataAdapter.Update()...

Запись из datatable в sql server
Здравствуйте. У меня имеется БД sql server 2012. В ней есть таблица с такими полями: . И есть...

Запись в БД MySQL экземпляра DataTable
У меня есть экземпляр класса DataTable, можно ли его напрямую записать в БД или по ячейкам...

Запись из DataTable (dataGridView) в таблицу SQL
собственно принял попытку сделать сделать помощника для обработки большого числа данных, что...

8
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
22.02.2012, 18:35 2
Цитата Сообщение от Guliash Посмотреть сообщение
('Тип устройства
а зачем ты перед тип устройства апостроф ставишь? якобы это строка? попробуй апостроф с двух сторон ставить 'Тип устройства'. а лучше сразу добавляй всей строкой, не указывая имена столбцов куда ты добавляешь... он их автоматом распределит
0
Guliash
93 / 93 / 14
Регистрация: 11.11.2010
Сообщений: 424
22.02.2012, 19:14  [ТС] 3
а зачем ты перед тип устройства апостроф ставишь?
Цитирую себя же:
При этом файл с данными столбцами создаётся, правда не совсем идеально. Спереди добавляется апостроф ('Тип устройства, 'Фирма)
а лучше сразу добавляй всей строкой, не указывая имена столбцов куда ты добавляешь... он их автоматом распределит
Не совсем понял, если не сложно, напишите пример.
0
Guliash
93 / 93 / 14
Регистрация: 11.11.2010
Сообщений: 424
24.02.2012, 22:36  [ТС] 4
Собственно говоря ключевой проблемой теперь стало - добавление апострофа перед словом в Excel. Подскажите, пожалуйста, как избавиться?
0
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
27.02.2012, 11:05 5
Если всё еще требуется пример, вот то, как я делал.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"" + ExcelDir + @"\Наличие-" + CurrentSettings.dbname + "-" + ".xls" + ";Extended Properties=Excel 8.0;";
 OleDbConnection con1;
            con1 = new OleDbConnection(connectionString);
            con1.Open();
            OleDbCommand com = new OleDbCommand("CREATE TABLE [Есть_в_МКС_нет_на_сайте]([Артикул] string,[Название] string,[Ед изм] string,[Цена, руб] string,[Без скидки] string,[Min кол-во] string,[Внут уп] string,[Внеш уп] string,[Торговая марка] string,[Статус] string,[Код товара] string,[РРЦ(Рекомендованная розничная цена ), руб] string)", con1);
            com.ExecuteNonQuery();
for (int i = 0; i < ProductsPresenceMKS.Count; i++)
            {
                if (CurrentSettings.Manufacturers.IndexOf(ProductsPresenceMKS[i].Марка.Split(' ')[0]) != -1)
                {
                    ТекСтрока++;
                    com = new OleDbCommand("INSERT INTO [Есть_в_МКС_нет_на_сайте$] Values('" + ProductsPresenceMKS[i].Артикул + "','" + ProductsPresenceMKS[i].Название.Replace("'", "`") + "','" + ProductsPresenceMKS[i].Единицы + "','" + ProductsPresenceMKS[i].Цена + "','" + ProductsPresenceMKS[i].Скидка + "','" + ProductsPresenceMKS[i].МинКоличество + "','" + ProductsPresenceMKS[i].ВнутрУпаковки + "','" + ProductsPresenceMKS[i].ВнешнУпаковка + "','" + ProductsPresenceMKS[i].Марка + "','" + ProductsPresenceMKS[i].Статус + "','" + ProductsPresenceMKS[i].Код + "','" + ProductsPresenceMKS[i].РРЦ + "')", con1);
                    com.ExecuteNonQuery();
                }
            }
работает как надо
1
Guliash
93 / 93 / 14
Регистрация: 11.11.2010
Сообщений: 424
27.02.2012, 14:15  [ТС] 6
Я заношу таким же способом. Прямо копия. Только у меня проблема с апострофом, типо Excel чтобы для себя понять что это строка добавляет его перед словом. У вас не было подобной проблемы?
0
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
29.02.2012, 17:30 7
Так тебе нужно чтобы то что ты заносишь в ячейку, Ексель считал строкой? если так, то попробуй при добавлении экранировать апостроф " \' ".
1
Guliash
93 / 93 / 14
Регистрация: 11.11.2010
Сообщений: 424
29.02.2012, 21:07  [ТС] 8
Вообщем приведу код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + saveFileDialog1.FileName + ";Extended Properties='Excel 8.0;HDR=Yes'"))
                {
                    conn.Open();
                    string sql = "CREATE TABLE [Sheet1]([Тип устройства]string,[Фирма]string,[Серия]string,[Название]string,[Характеристика]string,[Цена]string)";
                    OleDbCommand cmd = new OleDbCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    for (int i = 0; i < DtSet.Tables["Excel"].Rows.Count; i++)
                    {
                        cmd = new OleDbCommand("INSERT INTO [Sheet1$] VALUES ('" + DtSet.Tables["Excel"].Rows[i][0].ToString() + "','" + DtSet.Tables["Excel"].Rows[i][1].ToString() + "','" + DtSet.Tables["Excel"].Rows[i][2].ToString() + "','" + DtSet.Tables["Excel"].Rows[i][3].ToString() + "','" + DtSet.Tables["Excel"].Rows[i][4].ToString() + "','" + DtSet.Tables["Excel"].Rows[i][5].ToString() + "')", conn);
                        cmd.ExecuteNonQuery();
                    }
                }
Работает как часы, всё хорошо. Но когда открываю файл, в который записываю, то в каждой ячейке перед словом стоит апостроф. Где то вычитал что так Excel для себя помечает, что в этой ячейке именно строка. А как его убрать? Способ с "\'" к сожалению не помог.
0
_katon_
385 / 241 / 20
Регистрация: 03.10.2011
Сообщений: 1,003
29.02.2012, 21:23 9
Так это ж нормально: "Апострф нужен для того, чтоб Excel не пытался интерпретировать значения как дату или число"
1
29.02.2012, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 21:23

Запись из DataTable
object obj = table.Rows; table - DataTable компилятор выдаёт &quot;Внедренный оператор не может быть...

Вставка примечания в диаргамму Excelя
Задача, на мой взгляд, не из легких. Но вдруг кто подскажет. Мучаюсь целый день... Есть табл, на...

Запись столбцов DataGridView в DataTable
Доброго времени суток! Пытаюсь воспользоваться вот этим примером, но в немного изменённых...


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

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

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