Войти

Показать полную графическую версию : Работа с *.CSV через OleDbConnection


LilLoco
21-08-2013, 16:53
Здравствуйте.
Есть файл *.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
Похоже программа не понимает, что разделитель ;
Копайте в эту сторону

LilLoco
22-08-2013, 08:27
Похоже программа не понимает, что разделитель ; »
Да вы что, я то и не догадался

Iska
22-08-2013, 13:37
Пробовал менять Delimited на Delimited(;) - не помогает. »
Очевидно, на «Delimited(;)» — не установили флажок «Отключить смайлики в тексте» ;).

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

LilLoco
22-08-2013, 14:46
«Отключить смайлики в тексте» »
Да! Забыл про эту возможность.

а что на данной машине в разделе реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text» »
Проблема в том, что такого раздела не сущесвует. Да и плюс ко всему, права не дадут изменить, чтобы там не было.

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

-------

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

LilLoco
26-08-2013, 08:58
Попробовал реализовать через 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
Для 64битных систем ветка реестра отличается от 32х. Расположено здесь: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text »
В x64 среде это и есть указанный выше раздел для x86 приложений.

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




© OSzone.net 2001-2012