为什么连接到OLEDB会导致连接错误

3

我有以下代码,它连接到我的数据库并从表中检索一些数据:

    string connectionString = "Data Provider=SQLOLEDB;Data Source=myserver;Initial Catalog=Db;Integrated Security=FALSE;user=zh;pwd=zh12;";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();

    OleDbCommand command = new OleDbCommand();
    command.Connection = connection;
    command.CommandText = "SELECT [Location], [URL], [TAGS] FROM [Db].[dbo].[BOOKINGTABLE]";
    command.CommandType = CommandType.Text;

    using (OleDbDataReader reader = command.ExecuteReader())
    {
        menu_ul_1.DataSource = reader;
        menu_ul_1.DataBind();
    }
}

我遇到了以下错误:
异常细节:System.ArgumentException: 在 ConnectionString 中未指定 OLE DB 提供程序。 例如,可以使用“Provider=SQLOLEDB;”。
当我将连接字符串行更改为:
string connectionString = "Provider=SQLOLEDB;Data Source=myserver;Initial Catalog=Db;Integrated Security=FALSE;user=zh;pwd=zh12;";

I get the following error:

Exception Details: System.Data.OleDb.OleDbException: No error message available, result code: DB_E_ERRORSOCCURRED(0x80040E21).

Source Error: 


Line 23: using (OleDbConnection connection = new OleDbConnection(connectionString))
Line 24: {
Line 25:     connection.Open();
Line 26: 
Line 27:     OleDbCommand command = new OleDbCommand(); 

我该如何解决这个问题?

我的Web.config文件中有以下行:

<add key="ConnStringTEST" value="Data Source=myserver;Initial Catalog=Db;Integrated Security=FALSE;user=zh;pwd=zh12;" />

如何在我的C#代码中使用上述代码行?


1
不要使用OleDb连接SQL Server。请使用SqlClient,并参考http://www.connectionstrings.com/sql-server/获取连接字符串。 - Yuriy Galanter
@YuriyGalanter - 你为什么这么说?我以前使用Provider=SQLNCLI10Provider=SQLNCLI.1之类的东西,但不知道为什么。它只是起作用了。 - Erran Morad
1
@BoratSagdiyev 我怎么知道哪个是我的? - Si8
@SiKni8 - 我也想知道你的问题的答案。您可以尝试使用此网站生成字符串 - http://www.developerfusion.com/tools/sql-connection-string/。更好的是,尝试使用yuriy链接中提供的一些字符串。 - Erran Morad
@SiKni8 - 如果你有 Visual Studio,可以尝试观看这个视频来创建字符串 - http://www.youtube.com/watch?v=OEcd5oRRPmM 更多信息请访问此链接 - https://dev59.com/o2kv5IYBdhLWcg3wnB87 - Erran Morad
显示剩余6条评论
3个回答

2

经过大量的故障排除,我终于找出了为什么它不起作用的原因。我像这样重新编写了字符串:

string cString = "Provider=sqloledb;Data Source=myserver;Initial Catalog=mydatabase;User Id=myid;Password=mypassword;";

如果其他人遇到了同样的问题,这个方法会非常有效。

2
不要在提供用户ID和密码时使用“Integrated Security”。

0
使用 Borat 在评论中提到的 video,我能够参考连接字符串中的差异来调整我的连接方式。该视频演示了 Windows 身份验证,所以如果这不是你想要的,请确保添加自己的用户 ID 和密码。
我的问题在于我的 Provider 属性引用了 "Provider=IBMDASQL.DataSource.1",但连接到 DB/2 时,连接字符串在视频中显示为 "IBMDA400.DataSource.1"。
有趣的是,在观看视频后,我已经知道了这一点,并且已经使用过此方法,但已经忘记了。我们快速地忘记了事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接