Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с *.CSV через OleDbConnection (http://forum.oszone.net/showthread.php?t=266617)

LilLoco 21-08-2013 16:53 2205206

Работа с *.CSV через OleDbConnection
 
Здравствуйте.
Есть файл *.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 21-08-2013 21:07 2205342

Похоже программа не понимает, что разделитель ;
Копайте в эту сторону

LilLoco 22-08-2013 08:27 2205493

Цитата:

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

Да вы что, я то и не догадался

Iska 22-08-2013 13:37 2205618

Цитата:

Цитата LilLoco
Пробовал менять Delimited на Delimited(;) - не помогает. »

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

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

LilLoco 22-08-2013 14:46 2205655

Цитата:

Цитата Iska
«Отключить смайлики в тексте» »

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

Цитата:

Цитата Iska
а что на данной машине в разделе реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text» »

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

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

-------

Попытался сейчас проделать это через ACE.OLEDB - то же самое... Все в одну строку.
--------------
Ради эксперимента заменил разделитель с ; на Табулятор, эффекта нет. Разделитель никак не хочет определяться.

LilLoco 26-08-2013 08:58 2207715

Попробовал реализовать через Microsoft Text ODBC Driver - безуспешно. Все в одной колонке.
Больше вообще нет мыслей по этому поводу. А решить вопрос необходимо.
-----------------------------------------------------------------------------------------------------------------
Для 64битных систем ветка реестра отличается от 32х. Расположено здесь: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text. По умолчанию стоял параметр CSVDelimited, не без труда, заменил на Delimited(;) - заработало.
Все же вопрос остается не совсем решенным, почему работа программы никак не реагирует на разделитель задаваемый в строке подключения...

Iska 27-08-2013 03:55 2208299

Цитата:

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

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

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


Время: 23:47.

Время: 23:47.
© OSzone.net 2001-