不支持关键字:'提供商'。打开SqlConnection

时间:2014-12-09 20:10:48

标签: c# asp.net

我不知道为什么这个错误,我尝试了一切。我想将我的webForm连接到数据库.accdb 当我使用using(){}时,我收到此错误“不支持关键字:'提供者” 这是代码:

的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
            {

           }

       }

5 个答案:

答案 0 :(得分:17)

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(connDB))  //here is the error
        {
        }
    }
    

答案 1 :(得分:6)

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

我有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;

它运作得很好

答案 2 :(得分:5)

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

答案 3 :(得分:0)

我在Visual Studio中工作时发现了有问题的错误(类似),并将Connection Manager名称作为参数传递给脚本任务以确定其连接字符串。使用ConnectionString方法会使连接字符串包含比预期更多的元素(或值/对)(包括 provider )。在我的情况下,预期的连接字符串仅需要数据源初始目录集成安全性

我找到了两个解决此问题的方法。第一个对我不起作用但希望它适合你的方法是做以下事情:

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

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

答案 4 :(得分:0)

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