powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Создание файла Excel и запись в него с помощью OleDbConnection
7 сообщений из 7, страница 1 из 1
Создание файла Excel и запись в него с помощью OleDbConnection
    #40029668
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Пытаюсь создать файл Excel и записать в него данные, но при выполнении запроса
Код: c#
1.
objCmd.ExecuteNonQuery();


вылетает исключение
авторSystem.Data.OleDb.OleDbException: "Объект "TableData" не найден ядром СУБД Microsoft Access. Убедитесь, что объект существует, а его имя и путь к нему указаны правильно. Если объект "TableData" не является локальным, проверьте сетевое подключение или обратитесь к администратору сервера."

Вроде как он не может найти лист "TableData", возможно потому что он не создан, но в оф. доках MS ( https://docs.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/transfer-data-to-excel-using-visual-c )
и не указывается что нужно его создавать и как его создавать при использовании OleDbConnection.

Полный код функции:
Код: 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.
public void UploadInExcel()
        {
            string fileDirectorySave = AppDomain.CurrentDomain.BaseDirectory;
            if (fileType == null) fileType = "xls";
            /// Establish a connection to the data source.
            string fileNameStr = fileName + "Db" + "." + fileType;
            OleDbConnection objConn = new OleDbConnection(String.Format(
            "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}" +
            "{1};Extended Properties=Excel 8.0;", fileDirectorySave, fileNameStr));
            objConn.Open();

            // Add two records to the table named 'MyTable'.
            OleDbCommand objCmd = new OleDbCommand();
            objCmd.Connection = objConn;
            string strNameColumn = CreateStrNameColumn();

            for (int i = 0; i < dataDB.Count; i++)
            {
                
                string[] values = dataDB[i].Values.ToArray();
                string strValues = String.Empty;
                for(int j = 0; j < values.Length; j++)
                {
                    strValues +="'"+ values[j]+"'";
                    if (j != values.Length - 1) strValues += ",";
                }
                objCmd.CommandText = String.Format("Insert into {0} ({1}) values ({2})", "TableData", strNameColumn, strValues);
                objCmd.ExecuteNonQuery();
            }
            // Close the connection.
            objConn.Close();
        }



Подскажите где ошибка?
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40029740
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad__i__mir,
Попробовал перед вставкой данных создать лист c нужным названием:
Код: c#
1.
2.
3.
4.
5.
objConn.Open();
            OleDbCommand objCmd0 = new OleDbCommand();
            objCmd0.Connection= objConn;
            objCmd0.CommandText = String.Format("CREATE TABLE [TableData]");
            objCmd0.ExecuteNonQuery();


Все равно ошибка - не может найти.
Код всей функции:
Код: 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.
public void UploadInExcel()
        {
            string fileDirectorySave = AppDomain.CurrentDomain.BaseDirectory;
            if (fileType == null) fileType = "xls";
            // Establish a connection to the data source.
            string fileNameStr = fileName + "Db" + "." + fileType;

            OleDbConnection objConn = new OleDbConnection(String.Format(
            "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}" +
            "{1};Extended Properties=Excel 8.0;", fileDirectorySave, fileNameStr));

            objConn.Open();
            OleDbCommand objCmd0 = new OleDbCommand();
            objCmd0.Connection= objConn;
            objCmd0.CommandText = String.Format("CREATE TABLE [TableData]");
            objCmd0.ExecuteNonQuery();
            
            //// Add two records to the table named 'MyTable'.
            OleDbCommand objCmd = new OleDbCommand();
            objCmd.Connection = objConn;
            string strNameColumn = CreateStrNameColumn();

            for (int i = 0; i < dataDB.Count; i++)
            {

                string[] values = dataDB[i].Values.ToArray();
                string strValues = String.Empty;
                for (int j = 0; j < values.Length; j++)
                {
                    strValues += "'" + values[j] + "'";
                    if (j != values.Length - 1) strValues += ",";
                }
                objCmd.CommandText = String.Format("Insert into {0} ({1}) values ({2})", "TableData", strNameColumn, strValues);
                objCmd.ExecuteNonQuery();
            }

            objConn.Close();
        }
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40029993
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir
Код: c#
1.
"CREATE TABLE [TableData]"

ну так недостаточно ж просто таблицу создать, столбцы еще надо описать. Остальное плюс-минус правильно, если не вдаваться в возможность SQL-инъекции или просто попадания данных с апострофом, что приведет к ошибке
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40030038
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
Vlad__i__mir
Код: c#
1.
"CREATE TABLE [TableData]"

ну так недостаточно ж просто таблицу создать, столбцы еще надо описать. Остальное плюс-минус правильно, если не вдаваться в возможность SQL-инъекции или просто попадания данных с апострофом, что приведет к ошибке

Да, спасибо! Исправил. Думал, что можно просто создать пустой лист.
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40030118
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, а можете подсказать как нужно написать запрос, чтобы, если файл уже существует, то он перезаписал его?
Код: c#
1.
2.
3.
connect.Open();
                OleDbCommand cmd = new OleDbCommand(String.Format("CREATE TABLE [TableData] ({0})", strColumns), connect);
                cmd.ExecuteNonQuery();


А то он выдает ошибку при существовании файла с таким именем.
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40030124
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с точки зрения ADO не существует никакого файла.
Есть БД, а как она физически организована - ADO не знает

Так что два пути. Либо проверять обычным образом через файловую систему, либо игнорировать ошибку создания таблицы.
Можно сначала попробовать сделать запрос к этой таблице типа "SELECT TOP 1 * FROM...", заодно убедиться, что структура таблицы соответствует нужной. Либо сделать предварительно DROP TABLE, игнорируя ошибку. В общем - экспериментируй.
...
Рейтинг: 0 / 0
Создание файла Excel и запись в него с помощью OleDbConnection
    #40030146
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
с точки зрения ADO не существует никакого файла.
Есть БД, а как она физически организована - ADO не знает

Так что два пути. Либо проверять обычным образом через файловую систему, либо игнорировать ошибку создания таблицы.
Можно сначала попробовать сделать запрос к этой таблице типа "SELECT TOP 1 * FROM...", заодно убедиться, что структура таблицы соответствует нужной. Либо сделать предварительно DROP TABLE, игнорируя ошибку. В общем - экспериментируй.


Спасибо!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Создание файла Excel и запись в него с помощью OleDbConnection
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (3): Анонимы (3)
Пользователи онлайн (45): Анонимы (42), Yandex Bot, Google Bot 2 мин., Bing Bot 3 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]