不支持关键字:“提供程序”.打开 SqlConnection

本文关键字:提供程序 打开 SqlConnection 程序 关键字 不支持 | 更新日期: 2023-09-27 18:33:48

我不知道为什么会出现此错误,我尝试了所有方法。我想将我的网络表单连接到数据库.accdb当我使用 using(){} 时,我收到此错误"不支持关键字:'提供者'这是代码:

网络.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>

网络表单1

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
   {
       // .....                            
   }              
}

不支持关键字:“提供程序”.打开 SqlConnection

阿列克谢·明科夫说得对。但这里有更多细节,因为您需要更多澄清。

你的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
         {
         }
     }
    
我知道

这有点旧线程并且已经回答了,但我正在添加我的解决方案以供将来参考

我有SQL server 11.0数据库,当我尝试在SharePoint应用程序中使用它时遇到了错误,我没有尝试其他建议的答案,但我只是删除了"提供程序"部分(并重新排序),所以我的连接字符串看起来像这样:

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;

而且效果很好

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

我在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);
    }
}

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

好吧,我知道这已经很老了,我知道答案一直都在我面前,但我想强调的是,因为缺少它而搞砸我的一个参数是providerName="System.Data.OleDb"。以防万一其他人看到这个像我一样迟钝。