TL; DR
WinForms в C# DLL с использованием привязки данных к источнику данных, по-видимому, заблокированы для доступа к базе данных SQL Server, но необработанные запросы SQL Работа. Что я делаю не так?
Подробное описание проблемы
У нас есть C# WinForms. Net Приложение Framework 4, состоящее из: - EXE Проект - проект DLL, вызываемый EXE
Приложение обращается к SQL базе данных сервера.
В EXE и DLL содержатся несколько Windows форм, созданных с помощью конструктора Visual Studio , Для отображения данных в элементах управления формы элементы управления были добавлены в форму путем перетаскивания с панели «Источники данных». т. е. доступ к данным осуществляется через набор данных, сохраненный (в проекте Visual Studio) в виде файла XSD.
На компьютере разработчика все работает нормально, и мы можем открывать различные формы и просматривать данные. Но в тестовой системе, где SQL Сервер также установлен и работает, только формы в EXE могут обращаться к базе данных. Если мы открываем форму из DLL, мы получаем зависание приложения на несколько секунд, а затем появляется ошибка:
System.Data.SqlClient.SqlException (0x80131904): невозможно открыть базу данных «MyDatabaseName», запрошенную авторизоваться. Ошибка входа. Ошибка входа пользователя '\'.
при вызове:
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
Строка подключения в app.config верна, и приложение уже подключено к БД, поскольку raw SQL запросы / обновления работают нормально.
Странно то, что если я go в VS и воссоздаю источник данных (с помощью мастера) и вместо этого использую базу данных на тестовой машине вместо машины разработки , а затем перекомпилируйте, затем все работает на тестовой машине. Такое ощущение, что параметры в строке подключения где-то «скомпилированы» в DLL, но пока я не могу понять, что не так.
Мы используем SQL Server 2016 и Visual Studio 2013. Приложение скомпилировано для. Net 4.0.
Используемая строка подключения:
Data Source=192.168.0.1;Initial Catalog=MyDatabaseName;Integrated Security=True
Также попытались:
Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True
Извините за длинное объяснение (спасибо за чтение этого далеко!), но это кажется любопытным. Кто-нибудь знает, что здесь происходит? Заранее спасибо за любые подсказки!