0

Моя программа на Unity3D работает с MSSQL-базой. ОС - Windows 10. Когда клиентская программа запускалась в нашей сетке и коннектилась к серверному компу в нашей сетке, всё было ок. В сетке заказчика при попытке открытия соединения с базой выскакивает вот такой exception:

System.NullReferenceException: Object reference not set to an instance of an object at Mono.Data.Tds.Protocol.Tds70.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters) [0x00000] in :0 at Mono.Data.Tds.Protocol.Tds80.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters) [0x00000] in :0 at System.Data.SqlClient.SqlConnection.Open () [0x00000] in :0

Строка подключения к БД:

"Server=192.168.xxx.xxx\\SQLEXPRESS;
Database=DatabaseName;
User ID=User;
Password=password"

Строка, на которой выскакивает исключение:

sqlConnection.Open();

При этом если установить клиентское Unity3D-приложение на серверный компьютер заказчика, где установлена MSSQL-база, то всё работает, как надо. Другие приложения, установленные на клиентском компьютере заказчика (в т.ч. приложения и на C#, и на Unity3D) нормально работают с базой на серверном компе.

Мне кажется, дело или в сетевых настройках (но админ 10 раз проверил все настройки и отключил файрвол), или в том, что на клиентском компе заказчика отсутствует какой-то софт и приложение пытается обратиться к dll, который есть на клиентском компе в нашей сетке и на серверном компе заказчика, но отсутствующему на клиентском компе в сетке заказчика.

Это мой первый опыт работы с MSSQL. Может, кто-то сталкивался с подобной проблемой и может подсказать, в каких направлениях стоит двигаться, чтобы исправить ошибку?

Valera Kvip
  • 2,677
Yana
  • 21

2 Answers2

0

Общее описание ошибки NullReferenceException

Отсюда (Mono)

By default, SQL Server 2005 Express has TCP/IP disabled. So, you have to go into SQL Server Configuration Manager and enable TCP/IP for each instance you wish to connect via TCP/IP. But, you also must make sure the TCP/IP Protocol is one of the allowed client protocols. You may need to make sure your firewall allows mono.exe to do networking. And allow the SQL Server Monitor UDP Port 1434 in your firewall. If this UDP port is not enabled, then SqlClient running on Linux will not be able to get the TCP port to connect to based on the instance name SQLEXPRESS. SQL Server 2005 Network Configuration - Protocols for - SQLEXPRESS - enable TCP/IP. And SQL Server Native Client - Client Protocols - enable TCP/IP.

0

Если использовать логин от учётной записи Windows то Mono почему-то не хочет подключаться, ни с паролем ни с аутентификацией Windows (совмещенное).

Мне помогло создание учётной записи на сервере через Management Studio:

  1. Заходим в Management Studio и подключаемся к SQL серверу;
  2. Переходим в Безопасность - ПКМ по "Имена входа" - "Создать имя входа". введите сюда описание изображения
  3. В поле «Имя входа» указать логин.
  4. Затем выбрать "Проверка подлинности SQL Server" и указать любой пароль.
  5. Оставить включенной опцию «Требовать использование политики паролей». Остальные галочки убрать что бы не было гемора.
  6. В низу выберать базу данных по умолчанию. Именно эта база будет открываться после подключения пользователя к серверу. введите сюда    описание изображения
  7. Переходим в "Сопоставление пользователей".В верхнем списке отметить таблицы, с которыми можно будет работать при помощи этой учётной записи. В нижнем списке выбрать права. Обычно достаточно "db_owner" и "public". введите сюда описание изображения

Строка подключения такая: string connectionString = "Server=127.0.0.1;Database=DBTP;UserID=admin;Password=admin;";