2015-02-26 3 views
0

Я пытаюсь написать код C# вокруг открытия соединения Sage 300 с помощью C#. Я использую Acccpac.Advantage DLL.Открыть мудрец 300 AccPac DBLink Подключение к сеансу

Вот мой код

try 
{ 
    sage300Session.Init(sessionHandle, appID, programName, appVersion); 
    sage300Session.Open(_user, _ppswd, _companyID, DateTime.Today, 0); 

    // Open a database link. 
    sage300DbLink = sage300Session.OpenDBLink(DBLinkType.Company, DBLinkFlags.ReadWrite); 
} 

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

Мой вопрос: что происходит с паролем, который, кажется, не используется, и 2, когда я закончил с тем, что делаю, есть способ правильно закрыть соединение?

Условная версия Accpac.Advantage v 2.0.50727, и я подключаюсь к среде Sage 300 2014.

+0

Можете ли вы показать код, в котором вы создаете свой объект sage300Session? Кроме того, каковы значения вашей переменной для вызова .Init? Вы подключаетесь к живым или тестовым данным и для этой базы данных включена защита? –

ответ

0

Как оказалось, параметр безопасности не был включен в системной базе данных, чтобы требовать, чтобы пароли вошли в систему. Настройка «разрешила» проблему и использовала пароль. Я никогда не нашел способ отключиться от сеанса, поэтому я позволил ему отключиться, когда я закончил обработку, когда соединение выходит из области видимости

+0

Оба объекта DBLink и Session имеют метод .close. –

+0

Я посмотрел на dll для API (AccPac.Advantage.Dll). Ни для одного из них нет. Не могли бы вы ссылаться на AccpacCOMAPI? И если да, есть ли способ использовать их в тандеме? – jvoigt

+0

Хммм - моя ошибка. Я ожидал, что вы сможете получить доступ к методам .Close. Вы также можете попробовать установить объектную переменную в Null. Вы также можете запустить утилиту DBSpy, чтобы подтвердить, что соединения с базой данных закрываются при уничтожении/освобождении переменной объекта. Я никогда не использовал их в тандеме (я вообще не работал с интерфейсом .Net). Я получил доступ к COMApi из .Net без особых трудностей. –

0

На самом деле, как Session, так и DBLink реализуют IDisposable и call .Dispose (или используя ключевое слово) было бы достаточно для завершения сеанса. (Я бы хотел добавить это как комментарий, но не смог).