Ключевое слово не поддерживается: 'provider'. Открытие Объекта Sqlconnection

Я не знаю, почему эта ошибка, я попробовал все. Я хочу подключить форму к базе данных .accdb файл и когда я использую using () {}, я получил эту ошибку "Ключевое слово не поддерживается:" поставщик" Вот код:

web.config

<connectionStrings>
    <add name="ConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersManuel_2DocumentsLogin.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 ответов


Mynkov Алексей прав. Но вот более подробно, так как вам нужно больше разъяснений.

веб.config-это нормально. Автоматически сгенерированная строка подключения Visual Studios использует правильную настройку. Вместо этого в вашем файле webform1 вам нужно сделать 2 вещи.

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

вы должны использовать System.Data.OleDb.OleDbConnection.


Я знаю, что это несколько старый поток и уже ответил, но я добавляю свое решение для дальнейшего использования

у меня есть база данных 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;

и это сработало просто прекрасно!--3-->


Я нашел эту ошибку здесь (и аналогичную) во время работы в 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". На случай, если кто-то еще посмотрит на это так же тупо, как и я.