0

I see several answers to problems similar to mine, but I don't know enough to adapt those answers to my problem. So, with apologies for what is probably a duplicate question, here goes:

I'm trying to connect to a Microsoft SQL 2014 database on my local machine from a ASP.NET application. The code is:

oCN = new OleDbConnection(connectionString);

With a connectionString of:

Provider=SQLNCLI11; Server=FLIPPY\SQLEXPRESS; Trusted_Connection=yes;
Database=FingerTipDisplay; User Id=<my user id>; Password=<my password>

oCN is as follows after the call to new OleDbConnection():

-       oCN {System.Data.OleDb.OleDbConnection} System.Data.OleDb.OleDbConnection
        CanRaiseEvents  true    bool
        ConnectionString    "Provider=SQLNCLI11; Server=FLIPPY\\SQLEXPRESS; Trusted_Connection=yes; Database=FingerTipDisplay; User Id=<my user id>; Password=<my password>"    string
        ConnectionTimeout   15  int
        Container   null    System.ComponentModel.IContainer
        DataSource  ""  string
        Database    ""  string
        DbProviderFactory   null    System.Data.Common.DbProviderFactory
        DesignMode  false   bool
+       Events  {System.ComponentModel.EventHandlerList}    System.ComponentModel.EventHandlerList
        Provider    "SQLNCLI11" string
+       ServerVersion   'oCN.ServerVersion' threw an exception of type 'System.InvalidOperationException'   string {System.InvalidOperationException}
        Site    null    System.ComponentModel.ISite
        State   Closed  System.Data.ConnectionState
+       Static members      
+       Non-Public members      

I believe my SQL server is running correctly:

enter image description here

I can't get SQL Server Agent to start, and am not sure if that's causing my problem or not. From other replies I've ensured TCP/IP is enabled:

enter image description here

This is my database structure:

enter image description here

and I think that the user name and password I'm connecting has the right permissions from the dbo schema:

enter image description here

I've checked the SQL Server logs and don't see anything that looks like a failed login attempt, and I don't know where to look in the OleDbConnection object for feedback on why the connection failed. I'm working on someone else's code, so I'm reluctant to use SqlConnection() since I don't know the implications for the rest of the app.

I'm guessing that the problem is in the connection string, but I don't know what to use for that. I've tried SQLOLEDB as the provider, and I've tried using Initial Catalog instead of Database.

Thanks in advance for your help.

Update:

Thanks for all the help so far. oCN.Open() was throwing an OleDbException immediately, and it was:

"Login failed for user 'riehlj2002@gmail.com'."

I made some changes to the connection string based on the advice below...this is what it looks like right now:

Provider=SQLNCLI11; server=localhost; DataSource=localhost\SQLEXPRESS; Database=FingerTipDisplay; user id=<my user id>; password=<my password>

Now it doesn't throw the exception right away, but it still throws it. This is the exception I get:

{"Login timeout expired\r\nA network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.\r\nNamed Pipes Provider: Could not open a connection to SQL Server [2]. \r\nInvalid connection string attribute"}

A few things I notice.

  • First, if I change server to localhost\SQLEXPRESS I get an immediate exception telling me that I have an invalid connection string attribute, so the advice in this link doesn't work for me.
  • Second, it doesn't seem to matter whether I use localhost or my machine name...it does the same thing.
  • Third, I was surprised to see something in there about the named pipes protocol. I went into the SQL Server Configuration Manager and enabled that protocol...it didn't make a difference.
  • Fourth, it doesn't make a difference whether I specify DataSource or not in terms of the exception, but intuitively it seems like I have to specify the server instance somewhere so I've left it in.
  • Fifth, if I change the provider to SQLOLEDB I get a different exception: {"[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.\r\nInvalid connection string attribute"}, so I think I'm on the right track with SQLNCLI11.
  • Sixth, in the OleDbConnection object the DataSource and Database properties are both empty strings despite their being specified in the connection string.
  • Finally, the very last part of the exception I'm getting now talks about an invalid connection string attribute, but I removed each one in turn and either got the same exception or got another one that I've already described.

Again, thanks for the help.

John Riehl
  • 1,270
  • 1
  • 11
  • 22

2 Answers2

1

You are using Trusted_Connection=yes but specifying a username and password. It's either one or the other, I don't think you can do both in the same connection string (not sure if that'd raise any errors, but the supplied user and password would be at least ignored, for sure).

In your case, since you are using a user and a password, you'd need to set Trusted_Connection to no (or false), or just not set it (it should be false by default)

Jcl
  • 27,696
  • 5
  • 61
  • 92
0

OK, I found the problem. My original connection string wasn't finding the database, so I got no additional information in the server logs. I changed the connection string to:

Provider=SQLNCLI11; server=localhost\SQLEXPRESS; Database=FingerTipDisplay; user id=<my user id>; password=<my user id>

And then I found in the server log that it was configured to use Windows authentication only. I used this link to allow SQL server authentication, and all is now well. Your answers got me going in the right direction...thanks.

Community
  • 1
  • 1
John Riehl
  • 1,270
  • 1
  • 11
  • 22