关键字不受支持:'provider'。打开 SqlConnection。

18

我不知道为什么会出现这个错误,我尝试了所有的方法。我想要将我的Web表单连接到名为.accdb的数据库,但是当我使用using(){}时,我收到了这个错误:“不支持的关键字:'provider'”。

web.config

<connectionStrings>
    <add name="ConnectionString"
    connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Manuel_2\Documents\Login.accdb"     
    providerName="System.Data.OleDb" />
</connectionStrings>

WebForm1

private static string conDB =        
            ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;    

protected void Page_Load(object sender, EventArgs e)
{    
   using (SqlConnection con = new SqlConnection(connDB))  //here is the error
   {
       // .....                            
   }              
}

你是在打错字还是真的在Data和Source之间有那个大于号? - Steve
7
你不能使用OleDB连接字符串来连接SqlConnection。 - SLaks
@steve 这是一个糟糕的类型,我看过 Kudvenkat 的视频,他使用了它。 - manuel.koliqi
@manuel.koliqi,你已经得到了答案。Slaks的评论是正确的。 - Steve
5个回答

29
Aleksey Mynkov是正确的。但是因为您需要更多的澄清,这里提供更详细的信息。
您的web.config没问题。自动生成的Visual Studios连接字符串使用了正确的设置。相反,在您的webform1文件中,您需要执行两个操作:
1. 在文件顶部添加using System.Data.OleDb.OleDbConnection; ,并删除using System.Data.SqlConnection; 2. 将您的webform1代码更改为:
 private static string conDB = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
 protected void Page_Load(object sender, EventArgs e)
 {
     using (OleDbConnection con = new OleDbConnection(conDB))  //here is the error
     {
     }
 }

1
不识别使用 OleDB。 - manuel.koliqi
1
现在它正在工作,我只使用了System.Data.OleDb并更改了SqlConnection。谢谢大家。 - manuel.koliqi
1
@manuel.koliqi 不要忘记在所有已解决的问题上选择一个被接受的答案并点赞。欢迎来到Stack Exchange。 - JClaspill

12
我知道这个帖子有点旧并且已经得到了答案,但我会添加我的解决方案以供将来参考。
我的数据库是SQL Server 11.0版本,在尝试在SharePoint应用程序中使用它时遇到了错误。虽然我还没有尝试其他提出的答案,但我只是删除了“ Provider”部分(并重新排序了)。因此,我的连接字符串看起来像这样:
Provider=SQLOLEDB.1;Password=DBPassword;Persist Security Info=True;User ID=sa;Initial Catalog=DBName;Data Source=DBServer
现在看起来像这样:
Data Source=DBServer;Initial Catalog=DBName;Persist Security Info=True;User ID=sa;Password=DBPassword;

而且它运作得非常好。


谢谢,我刚刚删除了 Provider 部分,现在它可以正常工作了。 - majjam
你,我的朋友,非常受欢迎,很高兴知道我能帮到你。 - Shadi Mahasneh

5
你应该使用 System.Data.OleDb.OleDbConnection

当我在GridView上添加源代码时,Visual Studio自动生成了<connectionStrings>。 - manuel.koliqi
@manuel.koliqi 改用 OleDbConnectionusing 语句是大家正在讨论的话题,而不是连接字符串。 - JClaspill
不认识它,它说这是一种类型而不是命名空间。 - manuel.koliqi

0

我在使用Visual Studio并将连接管理器名称作为参数传递给脚本任务以确定其连接字符串时,在此处(以及类似情况)发现了问题。使用ConnectionString方法会带来比预期更多的元素(或值/对),包括提供程序。在我的情况下,预期的连接字符串仅需要数据源初始目录集成安全性

我发现了两个解决此问题的选项。第一个选项对我来说并没有真正起作用,但希望它对您有用,具体操作如下:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(Dts.Connections[connMgrName].ConnectionString);
string connectionString = builder.DataSource + ";" + builder.InitialCatalog + ";" + builder.IntegratedSecurity;

希望上述内容对您有用,因为您只需几行代码就解决了问题。然而,对我有效的选项是通过仅选择数据库所需的值/对来重新创建连接字符串:

string connectionString = Dts.Connections[connMgrName].ConnectionString;    //  ConnectionString will contain unsupported keywords like 'provider'
connectionString = connectionString.Trim(';'); //  Remove the trailing semicolon so that when we perform the split in the following line, there are no index errors.
var connStrDictionary = connectionString.Split(';').Select(x => x.Split('=')).ToDictionary(x => x[0], x => x[1]);     //   Here we get each value-pair from connection string by splitting by ';', then splitting each element by '=' and adding the pair to a Dictionary.
try
{
    connectionString = "Data Source=" + connStrDictionary["Data Source"] + ";Initial Catalog=" + connStrDictionary["Initial Catalog"] + ";Integrated Security=" + connStrDictionary["Integrated Security"]; //  Build the actual connection string to be used.
}
catch(KeyNotFoundException)
{
    Console.WriteLine("\t\tNot able to build the connection string due to invalid keyword used. Existing keywords and their values:");
    foreach( KeyValuePair<string, string> kvp in connStrDictionary)
    {
        Console.WriteLine("\t\t\tKey = '{0}', Value = '{1}'", kvp.Key, kvp.Value);
    }
}

希望它有所帮助。祝你好运!

0

好的,我知道这很老了,而且我知道答案一直都在我面前,但是我想强调的是因为缺少providerName="System.Data.OleDb"这一个参数使我困扰了很长时间。以防其他人跟我一样迟钝。


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