Установите ODBC DSN-Less-соединение с локальной распространяемой БД из приложения.NET

Мы разрабатываем приложение.NET, которое будет установлено на клиентском компьютере, на котором установлено бухгалтерское программное обеспечение Sage 50 (Peachtree). Наше приложение будет подключаться к Sage с помощью драйвера Pervasive ODBC. Мы смогли подключиться к Sage DB с помощью драйвера ODBC, настроив DSN. К сожалению, это требует, чтобы пользователь нашего приложения предпринял много шагов для настройки соединения, и мы хотели бы избежать этого.

Мы хотим подключиться к Sage DB, используя ODBC, но избегая настройки DSN. Мы попытались подключиться к БД с помощью приведенной ниже строки подключения из нашего приложения.NET:

Driver={Pervasive ODBC Engine Interface};dbq=STONEARBORLANDSCAPING;uid=XXXXXXXXX;pwd=XXXXXXXX;

При попытке подключения возникает следующая ошибка: "ОШИБКА [HY000] [Распространение] [Интерфейс клиента ODBC][LNA][Распространение] [Интерфейс механизма ODBC] [Диспетчер записи данных] Указанное имя файла недопустимо (Ошибка Btrieve 11)\r\nERROR [HY000] [Распространение] [Интерфейс клиента ODBC][LNA][Распространение] [Интерфейс механизма ODBC] [Диспетчер записи данных]

Мы также пытались связываться с именем БД, и оно указывало на недопустимое имя БД, поэтому было установлено соединение. Я считаю, что в строке подключения отсутствует параметр, указывающий на местоположение на диске. Посмотрев в Интернете и попробовав различные варианты, я не смог заставить его работать и всегда возвращался к ошибке "Указанное имя файла недействительно (ошибка Btrieve 11)".

Буду признателен за любой совет / направление следовать!

2 ответа

Решение

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

Ошибка Btrieve 11 не связана со строкой соединения. Это связано с DDF и тем, как они ссылаются на файлы данных. Я думаю, что вы получите ошибку 11 даже при доступе к базе данных через Pervasive Control Center.
Если вы получаете сообщение об ошибке 11 при подключении, а не при доступе к определенной таблице, это, вероятно, неверная база данных, и вам нужно получить новые DDF от Sage. Если вы откроете FILE.DDF с помощью Btrieve Function Executor, вы сможете прочитать записи, и я предполагаю, что одна из системных таблиц (имя таблицы начинается с X$) отсутствует или неверна. Должно быть не менее 10 записей:

Xf$Name                Xf$Loc                                                          
====================   ================================================================
X$File                 file.ddf                                                        
X$Field                field.ddf                                                       
X$Index                index.ddf                                                       
X$View                 view.ddf                                                        
X$Proc                 proc.ddf                                                        
X$Relate               relate.ddf                                                      
X$Trigger              trigger.ddf                                                     
X$Attrib               attrib.ddf                                                      
X$Occurs               occurs.ddf                                                      
X$Variant              variant.ddf         
Другие вопросы по тегам