Giuseppe Maggiore
Giuseppe Maggiore

Reputation: 2031

Connecting to SQL Server with .Net code on OS X

I am trying to port a web api that acts as a front-end for an SQL Server database. The web api works fine under Windows and when deployed to IIS, works from .Net Core on Windows, but gives a connection error when ran from within OSX or Linux.

The connection string that worked from within Visual Studio in Windows was

connectionString="data source=A\B;initial catalog=C;
persist security info=True;user id=X; password=Y;    
MultipleActiveResultSets=True;App=EntityFramework" 
providerName="System.Data.SqlClient"

which is then translated into the connection string for the .Net core variant as:

Server=A\B;Database=C;user id=X;password=Y;

The project compiles fine, even works under .Net core in Windows, but crashes when run from a *nix machine.

The error is:

Unhandled Exception: System.Data.SqlClient.SqlException: 
A network-related or instance-specific error occurred while 
establishing a connection to SQL Server. The server was not found or 
was not accessible. Verify that the instance name is correct and that 
SQL Server is configured to allow remote connections. (provider: TCP 
Provider, error: 35 - An internal exception was caught) --->
System.AggregateException: One or more errors occurred. (No such device
or address) ---> 
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No
such device or address

I can ping the address, but I guess the combination of valid address (A) and server instance (B) does not work with a simple slash under *nix.

Upvotes: 2

Views: 3493

Answers (1)

Cetin Basoz
Cetin Basoz

Reputation: 23797

Server=A\B;Database=C;user id=X;password=Y;

says that you are accessing to B instance on a Windows machine whose Netbios name is A. Probably the windows machine where it worked was "A" itself.

For a remote connection though there are things that you should have done:

  1. The SQL server instance should be set to allow remote connections.
  2. The port on SQL server listens to must be enabled for access on firewall.
  3. Instead of Netbios name, it is better to use IP address, along with port number if it is not the default port (1433).

You may start trying (where 1.2.3.4 is the windows machine's IP):

1.2.3.4\B;Database=C;uid=X;pwd=Y

For a detailed installation and setup of SQL Express on host PC, enabling for remote access and then accessing from remote computer, you may watch my short video series. Those videos were about installation of my application but most of it contains installing MS SQL server and accessing from remote location. It is a 4 parts series and here is the link to first part:

AccuSQL Installation 1/4

Upvotes: 1

Related Questions