Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для FatNinja
82 / 82 / 32
Регистрация: 17.02.2016
Сообщений: 226

Кириллический путь к базе данных (OleDbException)

26.08.2017, 16:46. Показов 1411. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Есть база данных dbf (Microsoft Visual FoxPro), устанавливаю с ней соединение из C# кода и вывожу данные.
Находится в каталоге приложения (.../App_Data/demodb.dbf), для работы в системе установлен драйвер OLE DB Provider.
Демонстрационный код:
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
39
40
41
42
43
44
using System;
using System.Data.OleDb;
 
namespace DemoProj
{
    internal class Runner
    {
        private static void Main(string[] args)
        {
            const string filename = "demodb.dbf";
            var connectionString = GetConnectionRow(filename);
            using (var oleDbConnection = new OleDbConnection(connectionString))
            {
                oleDbConnection.Open();
                var oleDbCommand = new OleDbCommand("SELECT * FROM " + filename, oleDbConnection);
                var oleDbDataReader = oleDbCommand.ExecuteReader();
                while (oleDbDataReader != null && oleDbDataReader.Read())
                {
                    var code = (decimal) oleDbDataReader.GetValue(0);
                    var name = ((string) oleDbDataReader.GetValue(1)).Trim();
                    var model = ((string) oleDbDataReader.GetValue(2)).Trim();
 
                    Console.WriteLine(code + ";" + name + ";" + model);
                }
                oleDbDataReader?.Close();
                oleDbConnection.Close();
            }
        }
 
        private static string GetConnectionRow(string filename)
        {
            const string dbProvider = "VFPOLEDB.1";
            const string dbFolder = "\\App_Data";
            var currentPath = GetApplicationPath();
            var dbFilenamePath = currentPath + dbFolder + filename;
            return "Provider=" + dbProvider + ";Data Source=" + dbFilenamePath;
        }
 
        private static string GetApplicationPath()
        {
            return AppDomain.CurrentDomain.BaseDirectory;
        }
    }
}
Если приложение запускается по пути только из символов латиницы - всё работает хорошо (даже с пробелами).
Но если в пути есть хоть один русский символ (кириллица) - приложение падает в 14 строке (oleDbConnection.Open) со следующим исключением:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Необработанное исключение типа "System.Data.OleDb.OleDbException" в System.Data.dll
Дополнительные сведения: Invalid path or file name.
 
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at DemoProj.Runner.Main(String[] args) in e:\DemoProjы\DemoProj\Runner.cs:line 14
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
Как подружить OleDbConnection с кириллическими путями? Это вообще возможно?
Или проще делать проверку на наличие кириллицы в пути с выводом соответственного сообщения пользователю?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2017, 16:46
Ответы с готовыми решениями:

Путь к базе данных
Приветствую всех участников форума. Столкнулся с такой проблемой. Есть файл базы данных и Система управления (некое приложение). Так вот,...

Путь к базе данных
Использую ini файл, в котором прописан путь. Подскажите как сделать чтобы запуская базу на другом компьютере мне не нужно было его...

Путь к базе данных
Нужна помощь! Есть два поля регистрации для компаний и для пользователей. Пользователи попадают в базу данных, а как мне прописать путь для...

2
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,590
Записей в блоге: 1
27.08.2017, 12:10
FatNinja, А кому придет в голову из специалистов и накой это надо кириллический путь-то указывать?!
0
 Аватар для FatNinja
82 / 82 / 32
Регистрация: 17.02.2016
Сообщений: 226
27.08.2017, 13:20  [ТС]
XIST, я, к сожалению, живу в русскоязычной стране и кириллический каталог может быть на ПК пользователя
Пока вижу только 1 вариант решения проблемы - предварительная проверка валидности пути к файлу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2017, 13:20
Помогаю со студенческими работами здесь

Путь к базе данных
Создаю приложение, работающее с БД. Возникла пара вопросов: 1. Если подключаться к БД используя Data Source в студии, то с помощью чего...

Путь к базе данных
Как прописать путь к базе данных которая лежит на сервере? что-то набросал, но оно не работает String Bases =...

Путь к базе данных
База данных находится в папке debug. Как можно прописать в app.config путь к базе данных сокращенно, чтобы при перемещении программы на...

Путь к базе данных
Всем привет)вопрос наверняка глупый,но меня поставил в тупик.. На нескольких формах имеется подключение к БД Acess OleDbConnection...

Путь к базе данных
Добрый день! Подскажите, как узнать в путь к текущей базе данных Access? Меня интересует аналог Excel'ского ThisWorkbook.Path


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru