Connecting to databases in C# : ArgumentException

5.6k views Asked by At

I'm running Visual Studio Developer Preview 2011 on a Windows 7 x64 machine.

I'm a beginning to learn C# and am having difficulties connecting to a database. I created a database with MS Access and created a connection by using the Connect to a Database option.

Here is the connection string

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\USER\Documents\BlankDB.mdb

I am following this tutorial

I added the variable masterConnectionString to the Project Settings and initialized it with the value of the connection string.

The program compiles but at run-time I get the following error

A first chance exception of type 'System.ArgumentException' occurred in System.Data.dll

Additional information: Keyword not supported: 'provider'. After this the program terminates.

If I remove the provider part from the string the following exception is thrown.

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: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

I have been trying for sometime now and this is really frustrating. Is there some other easier method of connecting to databases in C# ? Is it possible to create a SQL Server database from within Visual Studio?

Here is the code that I use to connect to the data base.

 static void TryCreateTable()
        {
            using (SqlConnection con = new SqlConnection(DogsDB.Properties.Settings.Default.BlankDBConnectionString))
            {
                con.Open();
                try
                {
                    using (SqlCommand command = new SqlCommand("CREATE TABLE Dogs1 (Weight INT, Name TEXT, Breed TEXT)", con))
                    {
                        command.ExecuteNonQuery();
                    }
                }
                catch
                {
                    Console.WriteLine("Table couldn't be created.");
                }
            }
        }
3

There are 3 answers

3
SLaks On BEST ANSWER

That's an OleDB connection string, not a SQL Server connection string.
You need to use it with an OleDbConnection.

If you want to use SQL Server rather than Access, you can create a database using SQL Server Management Studio or VS's Server Explorer.
You can then connect to it using a SQL Server connection string.

You can see sample connection strings here.

2
Nick Rolando On

You are following a tutorial for sql server. To connect to your MS Access db, your connection code should look something like this:

OleDbConnection sqlConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\USER\\Documents\\BlankDB.mdb");

Make sure the backslashes are escaped.

Then you can do

try{
  sqlConn.Open();
  OleDbCommand command = new OleDbCommand("CREATE....", sqlConn);
  command.CommandType = CommandType.Text;
  command.ExecuteNonQuery();
}
catch(InvalidOperationException ioe)
{
    ....
}
catch(OleDbException ode)
{
    ....
}
sqlConn.Close();
0
Security Hound On

There are several reasons you are getting this error.

1) The reference website is to use SQL Server database not Access. 2) You are running on a x64 operating system which means the following is true.

The Microsoft OLE DB Provider for Jet and the Jet ODBC driver are available in 32-bit versions only. You can't run them in 64 bit mode. 

For example, you have a 32-bit application that uses the Microsoft OLE DB Provider for Jet. If you migrate the application to run in the

64-bit mode, the application cannot connect to the data source by using the Microsoft OLE DB Provider for Jet. This issue occurs because the application requires a 64-bit version of the Microsoft OLE DB Provider for Jet. Note also that a website can be either an 32 bit or 64 bit application.

So the solution is use the following:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255

If you run a program in a 64 bit environment and need to utilize jet to open an access, excel or text file there are several options to make this work. •Run the program in WoW64 mode (emulates 32-bit on 64 bit systems). This will make the 32 bit drivers work. •If the application is an web app hosted on IIS 7 you can choose to configure the web sites application pool to run in 32-bit mode. •With the new Office 2010, there will be new drivers coming, "2010 Office System Driver", which will be provided as booth 32-bit and 64-bit versions. You can use these drivers to let you application connect to Access, Excel and text-files in a 64 bit environment, utilizing the new 64 bit drivers. The provider name is "Microsoft.ACE.OLEDB.14.0". You don't need to buy or install the Office suite, the components are available as a separate download.

If you want additiona assistance you will have to provide the code your using.

You should update the code in your question AFTER you have researched and installed the linked library.