Connecting to databases in C# : ArgumentException - c#

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.");
}
}
}

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();

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.

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.

Related

SQL0332N Character conversion from the source code page "" to the target code page "" is not supported

I am attempting to connect to an IBM DB2 database from a .NET 5 console application. This works fine against DB2 LUW in a local Docker instance, but fails when connecting to a z/OS mainframe instance.
Server:
IBM DB2 v11.5
z/OS
Client:
.NET 5 console application
IBM.Data.DB2.Core (v3.1.0.400)
IBM Data Server Driver (v11.5)
Error:
IBM.Data.DB2.Core.DB2Exception (0x80004005): ERROR [57017] [IBM] SQL0332N Character conversion from the source code page "" to the target code page "" is not supported. SQLSTATE=57017
at IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
at IBM.Data.DB2.Core.DB2Connection.Open()
at <my code>
Connection string:
Database=<redacted>;User ID=<redacted>;Password=<redacted>;Server=<redacted>:448;Persist Security Info=True;CurrentSchema=<redacted>;Connect Timeout=30
Opening connection:
var connection = new DB2Connection(connectionString);
try
{
connection.Open();
}
catch (DB2Exception e)
{
logger.LogError("Unable to access DB2 instance");
logger.LogError(e.ToString());
throw new DbAccessAcception(e);
}
The DB user I am testing with is already in use by another .NET program to connect to this database, though that app is older (.NET Framework 3.5).
What I've tried:
Setting the code page to 1200, 1208, or 1252, using both the DB2CODEPAGE environment variable as well as the connection string CodePage parameter; nothing changed the error message
Verified all software (DB2, DB2 DSDRIVER, .NET provider) are v11.5
Verified I can connect and run queries with db2cli.exe
Now what?
Is there somewhere I can/should be setting the DB2 server type? Eg, z/OS vs LUW? Note that I'm not using EntityFramework, just directly executing Commands on that Connection object (though the error comes before then).
We have solved the problem. There were two changes to make, which definitely complicated things.
We did need to set the DB2CODEPAGE environment variable to 1208
We were using the CurrentSchema connection string parameter to set the prefix for our SQL queries, but the prefix wasn't the actual schema, which broke the connection even when the right codepage was set, without a useful error message on the client. We removed that parameter and manually set the table prefix on our SQL queries.
Making both those changes got the application working.
Connecting to the local Docker instance had worked because I had set an actual schema for that prefix, not realizing the prod instance was configured differently.

VS C# Sql Client unable to connect to SQL Server, uses Windows auth instead of SQL Server auth

I have two desktop clients with VS 2017. I inherited a C# .NET app that connects to a SQL Server in the next room. We generally use SQL Server authentication (as opposed to Windows authentication) when we perform SQL queries.
I use a connection string that looks something like this ...
"Data Source=DR101; User Id = DR_DATA; Password = CD7504st; Integrated Security=SSPI; TransparentNetworkIPResolution=False"
... which works like a charm from the first desktop. From the second desktop it always fails to access the database, giving an error indicating a Windows login failure ...
... threw an exception.
System.Data.SqlClient.SqlException: Login failed for user 'SDAR\SdarAutoSvc'
I have compared everything I can think of between these two systems. As far as I can ascertain, they are identical in most every way ... both use the same Visual Studio (Help > About, and compared the long list of module versions. Identical on both systems), the same System.Data.dll module, the same App.config, C# source code, input data, etc.
The failing system only fails via this visual studio app - i.e., I can reach the database server from that desktop via SMSS, using the SQL Server credentials (not Windows authentication).
I am out of ideas as to how this second machine might be unable to access the database, and why it apparently uses Windows auth rather than the sql userId/password from the connection string.
If you want SQL server Authentication then remove Integrated Security=SSPI; from the connection string.
Try with this connection string -
"Data Source=DR101; User Id = DR_DATA; Password = CD7504st; TransparentNetworkIPResolution=False"

Connect to database in network drive

I am a newbie to SQL Server and .net. Please let me know if my question is not clear before down voting.
I am working on a Windows application with C#. I should give option to users to connect to a .mdf file on a network drive. On my machine, I have Windows and SQL Server authentication. Users have SQL authentication hence I should use userid and pwd. Myself and users work on that network drive, read/write/modify. We pretty much share documents, add and delete docs from network drive.
Here is the designer
I will choose the SQL Server database .mdf file which is located in network drive and then do test connection. For Test Connection this is the code
string sTemp = System.Configuration.ConfigurationManager.AppSettings["connectionStringShare"];
string connectionString = sTemp.Replace("{AppDir}", txtDB.Text.Trim());
using (SqlConnection objSqlConnection = new SqlConnection(connectionString))
{
try
{
objSqlConnection.Open();
objSqlConnection.Close();
MessageBox.Show("Connection is successfull");
}
catch (Exception ex)
{
MessageBox.Show("Error : " + ex.Message.ToString());
}
}
This is the connection string
<add key="connectionStringShare"
value="Data Source=.\SQLEXPRESS;Initial Catalog=TableSQLExpress;AttachDBFilename={AppDir};Integrated Security=SSPI;user id=sa;password=pwd;" />
Here is the error message I got
Directory lookup for the file "S:\zrep\TableSQLExpress.mdf" failed with the operating system error 3(The system cannot find the path specified.).
Cannot attach the file 'S:\zrep\TableSQLExpress.mdf' as database 'TableSQLExpress'.
I changed connection string and tried also tired using windows authentication. No luck. Let me know if I need to provide any additional details. Since I am newbie to this field please give me detailed answer. I am glad to find this group. Thanks for everyone who looked into this.
When you use server-based SQL Server (i.e. Microsoft SQL Server Express) you are unable to share database file via network drive, it is by design. Even if you override default SQL Server behavior with a switch and enable UNC paths for databases, your data will be corrupted by multiple server instances trying to use single database MDF file. If you need to host database in serverless environment (using only a network drive), you may opt to Microsoft SQL Server Compact (SQL Server CE) edition. But be aware that in such case only one user will be able to access database file at the same time (exclusive locking -> low performance). Plus SQL Server CE does not have stored procs.

Can't connect to Oracle database

I am working on an ASP.NET project, which uses C# for code-behind. It attempts to connect to an Oracle database using the following code, which already existed in the project when I began working on it:
OracleConnection myConnection = new OracleConnection();
myConnection.ConnectionString = ConfigurationManager.ConnectionStrings["OraFinCnString"].ConnectionString;
myConnection.Open();
The application runs locally (opens up in a browser on localhost), and attempts to connect to a remote Oracle Database. When I run it, the The last line above gives the following error:
"InvalidOperationException was unhandled by user code. Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed."
The connection string was provided by my client, so I presume it is correct, and this doesn't seem like the sort of error that would be caused by incorrect connection information. But I'm pretty well stumped as to exactly what the problem is, and would appreciate any insight.
Please take a look at the following link. You will need to Install Oracle 11g Oracle Data Access Components
Oracle Provider

SQL Server CE Database Connection Issues

I have an application with a database called voodoobase.sdf.
Using .NET Framework Data Provider for Microsoft SQL Server Compact 3.5
I can see it in Server Explorer and connect to it fine from there. The DB File is located in:
c:\Users\me\Documents\VisualStudio2010\Projects\testproj\voodoobase.sdf
The same named DB under Solution Explorer is said to reside at the same location.
c:\Users\me\Documents\VisualStudio2010\Projects\testproj\voodoobase.sdf
Assuming they are the same... why can my application which compiles successfully alwways crash with a connection error:
SqlConnection dbCon = new SqlConnection(Properties.Settings.Default.voodoobaseConnectionString);
dbCon.Open();
Throws an error on dbCon.Open() saying that could not get a connection to the SQL server. Let me know if further detail is required.
Do not use the SqlConnection class, but the SqlCeConnection class.

Categories

Resources