.NET - Работа с *.CSV через OleDbConnection

Ответить
Аватара пользователя
LilLoco

.NET - Работа с *.CSV через OleDbConnection

Сообщение LilLoco »

Здравствуйте.

Есть файл *.csv - разделитель в нем (;). Есть кусок кода:



Код:

Код: Выделить всё

string ExcelConnectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", "Путь к файлу");
using (OleDbConnection odb = new OleDbConnection(ExcelConnectionString))
                    {
                        string SheetName = Path.GetFileNameWithoutExtension("Файл");
                        OleDbCommand command = new OleDbCommand("Select * FROM [" + Path.GetFileName("Файл") + "]", odb);
                        odb.Open();
                        using (DbDataReader dr = command.ExecuteReader())
                        {
                            string SqlConnectionString = "Параметры подключения";
                            using (SqlBulkCopy bulk = new SqlBulkCopy(SqlConnectionString))
                            {
                                bulk.DestinationTableName = "dbo.Таблица";
                                bulk.WriteToServer(dr);
                            }
                        }
                    }

На Windows XP все работало отлично. Теперь Windows 7 - не работает. Столбцы не разделяются. Все импортируется в первый столбец.

Пробовал менять Delimited на Delimited(Изображение - не помогает.



Помогите разобраться.

Спасибо.
Аватара пользователя
BlackEric

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение BlackEric »

Похоже программа не понимает, что разделитель ;

Копайте в эту сторону
Аватара пользователя
LilLoco

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение LilLoco »

Цитата BlackEric:



Похоже программа не понимает, что разделитель ;
.NET - Работа с *.CSV через OleDbConnection




Да вы что, я то и не догадался
Аватара пользователя
Iska

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение Iska »

Цитата LilLoco:



Пробовал менять Delimited на Delimited(Изображение - не помогает.
.NET - Работа с *.CSV через OleDbConnection




Очевидно, на «Delimited(;)» — не установили флажок «Отключить смайлики в тексте» Изображение.



LilLoco, а что на данной машине в разделе реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text», параметре «Format»? Сам сомневаюсь, что в этом дело — Вы ведь в самой строке подключения указывали разделитель, и без толку.
Аватара пользователя
LilLoco

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение LilLoco »

Цитата Iska:



«Отключить смайлики в тексте»
.NET - Работа с *.CSV через OleDbConnection




Да! Забыл про эту возможность.




Цитата Iska:



а что на данной машине в разделе реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text»
.NET - Работа с *.CSV через OleDbConnection




Проблема в том, что такого раздела не сущесвует. Да и плюс ко всему, права не дадут изменить, чтобы там не было.



Когда искал различную информацию по данному вопросу, натыкался на слова, что Jet не работает на системах Windows 7, .. x64. Но при этом у всех возникает ошибка о не существовании Jet. У меня же вставка происходит, но криво.



-------



Попытался сейчас проделать это через ACE.OLEDB - то же самое... Все в одну строку.

--------------

Ради эксперимента заменил разделитель с ; на Табулятор, эффекта нет. Разделитель никак не хочет определяться.
Аватара пользователя
LilLoco

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение LilLoco »

Попробовал реализовать через Microsoft Text ODBC Driver - безуспешно. Все в одной колонке.

Больше вообще нет мыслей по этому поводу. А решить вопрос необходимо.

-----------------------------------------------------------------------------------------------------------------

Для 64битных систем ветка реестра отличается от 32х. Расположено здесь: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text. По умолчанию стоял параметр CSVDelimited, не без труда, заменил на Delimited(Изображение - заработало.

Все же вопрос остается не совсем решенным, почему работа программы никак не реагирует на разделитель задаваемый в строке подключения...
Аватара пользователя
Iska

Re: .NET - Работа с *.CSV через OleDbConnection

Сообщение Iska »

Цитата LilLoco:



Для 64битных систем ветка реестра отличается от 32х. Расположено здесь: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text
.NET - Работа с *.CSV через OleDbConnection




В x64 среде это и есть указанный выше раздел для x86 приложений.



А с ConnectionString, действительно, непонятно — почему так. Разберётесь — не сочтите за труд, отпишитесь.
Ответить

Вернуться в «Программирование и базы данных»