The same connection succeed and fails in different .net solutions - c#

I have two .net solutions.
They both have this code:
var connectionString = "Server = ServerName; Database = DatabaseName; Trusted_Connection=True;"
var connection = new SqlConnection(connectionString);
connection.Open();
connection.Close();
And they both use complitely the same connectionString. And they connect to MSSQL Server;
And in the first solution connection.Open() succeeded and in the second one it failed.
Error message : Named Pipes Provider, error: 40 - Could not open a connection to SQL Server
And every time I create new solution it fails. So this connection only works in one specific solution. And also, my teammates tested this and didn't have such issues.
Can you help with hints why it can be so?

Check that your SQL server has the TCP/IP protocol enabled and if it is using dynamic ports, ensure that the SQL Browser service is running.
Make sure that any firewall software (windows firewall etc.) has an exception added for the particular exe (the sqlservr.exe file gets copied into the instance folder, which will be in C:\Program Files\Microsoft SQL Server\{instance name}\MSSQL\Binn, where instance name might look something like MSSQL11.SQLEXPRESS) or TCP port 1433 or UDP port 1434 (TCP 1433 for the SQL service itself assuming standard settings, UPD 1434 for the SQL Browser Service).
Check that the user account used to access the server (it should also have sufficient permissions and the login should be enabled), in this case it will be whatever windows account you are logged in as or whatever account your IIS application pool is running as because you are using Trusted_Connection=True.
Also check that you have an up-to-date SQL Client on your machine, you can get the latest version for windows here.

Open Sql Server Configuration Manager and make sure that the Named Pipes option is enabled for your Sql server instance.

Sorry for disturbing you. My problem was my inattentiveness. I created soluiton on another network machine.

Related

I want to create a shared database c# windows form application?

This application that i am trying to create, whose "instances/copies" will be installed on multiple PCs of the client and are able to access the same database from another PC of the same client that has SQL server running all the time through the same network(i.e: they have the same router and static IP of server etc).
I had two ways to do this:
To make applications use the same database through synchronization.
To have multiple localdbs that then share the changes a database server.
By following 1st way,
I tried setting up the Connection String like:
SqlConnection con = new SqlConnection("Data Source =[serverPcIP,Port];Integrated Security=True;Connect Timeout=30");
SqlConnection con = new SqlConnection("SERVER=[serverPcIP]; Port=[portno];Integrated Security=True;Connect Timeout=30");
In Server - Security Settings:
I have allowed "SQL Server and Windows Authentication mode"
In Sql Server Configuration Manager > SQL Server Network Configuration > Protocols for SQLEXPRESS => TCP/IP = Enabled; under IP Addresses -> IP1 -> TCP Port = 1433 (port that i used in my connection-string)
In advanced Firewall Setting:
Have enabled the Incoming & Outgoing rules for port 1433.
The exception that i get:
Additional information: 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: 0 - The wait operation timed out.)
Can someone please tell me what configurations (either in connection-String or in SQL server itself) am i missing?
Your connection string lacks the instance name e.g. data source=<hostname or ip>\SQLEXPRESS. If your database listens on the default port 1433 you don't need to pass that with the connection string
If you setup a SQL server, you can choose between the default SQL Server instance or the named instance. For SQL Express the default is to install a named instance with the name SQLEXPRESS. If you don't use the default instance and install a named instance instead, you have to pass it with the connection string.
The default SQL Server instance ist just a named instance with the well known name MSSQLSERVER. So if you installed the database instance as the default instance you can connect with <host>[,port] or <host>\MSSQLSERVER[,port]
based on your screenshot, under IP1, the ip address is active but not enabled.
also, ip address that starts with 169.x.x.x normally would mean you have set up this network card to use DHCP, but the network card failed to have ip address from the DHCP server.
do you mind try to use static ip address?
Consider following steps:
Since you mention the port number using configuration manager, the service required restart. please restart the service if not done so.
Seems you are able to connect via SSMS, once service restarted verify SQL Error log via SSMS -> Managemnt -> SQL Server Logs, you must find a message as follows:
Server is listening on [ 'any' <ipv4> 1433].
Further details, follow these steps. Also, this..

How do I let multiple computers share a single database on a server?

I wrote a program to track the records of an employee in Windows Forms application in Visual Studio. I am using SQL Server 2017 Express for the data storage. My SqlConnection statement is using localhost and SQL Server authentication, what I need to know if how do I let multiple computers be in sync to a single database, there is no internet but the computers share a server where they can store files inside and all the computers can access it, I read somewhere that people input the ip address of the main computer in the SqlConnection statement but I'm not sure how that would work.
This is my SqlConnection statement currently
new sqlConnection(#"Data source = localhost\sqlexpress; Initial catalog = database;user id =sa;password = 1234; integrated security = false")
The program will be installed on multiple computers for people to use
First of all you have to change localhost with the host name or with the ip of the sql server hosting pc.
it will be something
new sqlConnection(#"Data source = mySqlServerPcName\sqlexpress; Initial catalog = database;user id =sa;password = 1234; integrated security = false")
then you have to enable tcp/ip on the sql server Configuration Manager on the hosting pc.
open sql server Configuration Manager
then go to SQL Server Network Configuration and click on Protocols for SQLEXPRESS.
Then you will see that TCP/IP is disabled. Double Click on TCP/IP and select yes to enabled. click ok and you will get the following message
press ok and click on the left side SQL Server Services. Right click the SQL Server(SQLEXPRESS) and select restart.
Now your SQL Server is ready.
Now the last thing you have to do is open the sql port on the firewall.
open a command line and run the following command
netsh advfirewall firewall add rule name = SQLPort dir = in protocol = tcp action = allow localport = 1433 remoteip = localsubnet profile = DOMAIN
Now you are ready to connect to the database from other computers.
Make sure that the sql server on a machine is accessible from all computers you intent the app to work. You also may have to open ports used by sql server in firewall. You can then update the connection string to connect to the sql instance.
Note: It can be a good idea to store connection string in a configuration file rather than in the code.

Mono crashes while connecting to a sql server with a certain instance name

I created a sql server instance called 'abcd' on my computer but when I try to connect to it I receive a strange error. I am able to connect to my others instances with the same code. Is the instance name causing this error?
Here is my code :
string connectionString = "Server=192.168.1.185\\abcd;" + "Database=test;" + "User ID=sa;" + "Password=bob;";
IDbConnection dbcon;
using (dbcon = new SqlConnection(connectionString))
{
dbcon.Open(); // <-- crashes here
Console.WriteLine("Connected");
}
Crash
Mono does not support names pipes or shared memory for connecting to SQL Server. Please enable the TCP/IP protocol.
What's wierd is that I'm able to connect to my other instances. The only thing that changes is the instance name.
I'm using Xamarin.iOS 9.4.0.0, Xamarin Studio 5.10.1, Mono Framework MDK 4.2.1.102
In SQL server the enabled protocols are configured on a per-instance basis, so the most likely explanation is that the named instance you're trying to connect to doesn't have the TCP/IP protocol enabled.
You can check this by opening the Sql Server Configuration Manager tool and going to SQL Server Network Configuration -> Protocols for {instance name}. Make sure that the TCP/IP protocol is enabled.

SQL Server Connection Issue - I can connect but other users can't

[edit] so not sure what happened, but we ended up resetting the server and turning off/on TCP/IP and Named Pipes and after a restart and updating the settings everything started working again. weirdest thing. anyways thanks for the help guys.
I'm building a C# WPF application for my job, and I'm getting a weird problem that I've been trying to figure out for the past week. The application connects to the server and imports several tables on start up. So I built it out and was testing it with no issues, but when i pass it to our testers, and everyone is getting the following errors:
Provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server
The users are able to connect to the server through other methods (SSMS/Excel VBA), but just through the application it won't work.
I've checked the following:
Remote connections enabled
TCP/IP connections enabled
Firewall settings are the exact same across all users (me included)
application is compiled as 32 bit (saw this in another thread)
We're using SQL Server 2008 and I've tried several connection strings/methods.
below is the code I'm using to connect:
public void Open_DB_Conn(string Connection_Str)
{
try
{
Sql_Conn = new SqlConnection(Conn_Str);
Sql_Conn.Open();
}
catch (Exception e)
{
MessageBox.Show(string.Format("Error Message:{0} Conn String: {1}",e.Message,Conn_Str));
}
}
Below is my connection string (this is just one of many iterations I've used trying to get it working):
Data Source=IP Address;Initial Catalog=DB_Name;User ID=LOGIN;Password=PWD
Anyone know why I would be the only one able to get it to work and that the users are able to login to the server using other applications without a problem? They use it for logging their excel VBA scripts and there aren't any issues there.
Try this - it may be your answer
"The error is reported by client library. While your server is listeing on remote TCP, client will still try TCP and NP connection in order. So the error client behavior is expected. From what you have described, I believe that even though you enabled the remote TCP connection on the XPSP2 machine, you didn't make the TCP listening port an exception of XPSP2 personal firewall. You should follow steps below to resolve this issue.
check the SQL Server Errorlog to make sure SQL Server is now listening on TCP/IP and confirm which port it is listening on. Usually 1433. In the Errorlog, you will see several lines that discuss what SQL Server is listening on. Below is an example:
2006-01-04 01:41:07.65 server SQL server listening on 10.254.1.150: 1433. <--Shows the IP Address and the port.
2006-01-04 01:41:07.65 server SQL server listening on 127.0.0.1: 1433. <--Shows another IP Address and the port.
2006-01-04 01:41:07.69 server SQL server listening on TCP, Shared Memory, Named Pipes.
2006-01-04 01:41:07.69 server SQL Server is ready for client connections
2, Make sure on Windows XP that the firewall is not blocking that port.
3, go to your client machine and run the client network configuration tool (cliconfg.exe) Make sure TCP/IP is enabled, click properties and make sure the port number is the same one as SQL Server is listening on. Here you can enable NP or disable client NP as well.
Once both the client and the server are using TCP/IP with the same port number and the firewall on server machines is not blocked, you should be able to connect.
Hope this helps."
(Ref: http://social.technet.microsoft.com/Forums/sqlserver/en-US/c488cf76-2515-440f-b3f8-9cfad689c5b6/named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server?forum=sqldataaccess)
You have to configured your SQl server so that other IP can connect it for that you have to gone through mentioned link
Configure SQL server
What authentication are you using for the SQL Server? Windows Authentication or SQL Server authentication? My suggestion is to first turn on SQL Server authentication and use the sa\password to connect to the server. If you are successful, then ask the others (users of your application) to try with the same connection string. Let me know what you find out.
Be sure that the port specified in:
Data Source="IPAddress,port";Initial Catalog=DB_Name;User ID=LOGIN;Password=PWD
matches the port on your SQL Server. You can check that by going on SQL Server COnfiguration Manager and viewing TCP/IP properties.
EDIT :
It is also the case the port defined by blocked by an external firewall. And the rest Applications use other ports. Try to find out which port you can use (if indeed the are restrictions to your network)
Make sure your SQL Server instance is properly configured to use TCP using Sql Server Configuration Manager.
It is by default disabled in SQL Express, as show below.
I'd like to know more about your "Sql_Conn" class.
Also, try using this for your connection.
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
string cmdText = "SELECT name FROM sys.tables"
cmd.CommandText = cmdText;
cmd.ExecuteNonQuery();
}
}

Data source for connection string

What connection string should I use if SSMS connects to it using simply machine name, without instance name?
I mean it connects using the following string: PCName
I used to connect using PCName/SQLExpress. I cannot set correct connection string in my app in order to connect app to database on this machine.
How can I check what data source I should use? I've checked in Sql Server configuration that server instance named as SQLEXPRESS.
So I tried data source as:
.\SQLEXPRESS
PCName\SQLEXPRESS
.
I'm trying to connect to a service-based database, located in my app folder. So I'm using the following connection string:
data source=PCName;attachdbfilename=|DataDirectory|\spareparts.mdf;integrated security=true;user instance=true;multipleactiveresultsets=true;App=EntityFramework;
If SSMS connects via PCName then your application should be able to use Data Source=PCName. However it depends on whether your application is on the same machine as SSMS or not. If on a different machine it might not be able to connect for a variety of reasons. We can't speculate what the problem might be if all you do to describe the issue is "It won't connect" - what does that mean? Do you get an error message? If so, what is it? Make sure:
SQL Browser service is started
TCP/IP is enabled
Add Network=DBMSSOCN; to the connection string
You've also tried the IP address in addition to PCName
Firewall isn't blocking the SQL Server port

Categories

Resources