Как я могу исправить «Ключевое слово не поддерживается: метаданные» при открытии SQL-соединения? - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь подключиться к базе данных, но, похоже, мое соединение не проходит.Я использую C # MVC для веб-страницы, которую я создаю.Как я могу исправить следующую ошибку:

System.ArgumentException: 'Ключевое слово не поддерживается:' метаданные '.'.

Ошибка в строке using (Sqlconnection con = new Sqlconnection(conStr)).Что я делаю не так в этой строке и как вы называете свой SQL-запрос в C # MVC?

string conStr = ConfigurationManager.ConnectionStrings["Training_DatabaseEntities"].ConnectionString;
List<FisYear> YerFis = new List<FisYear>();
using (SqlConnection con = new SqlConnection(conStr))
{
    SqlCommand cmd = new SqlCommand("select * from [dbo].[FiscalYear]", con);
    con.Open();
    SqlDataReader rdr = cmd.ExecuteReader();
    while(rdr.Read())
    {
        FisYear fy = new FisYear();
        fy.FisDate = rdr["ST_FI"].ToString();
        YerFis.Add(fy);
    }

    SelectList list = new SelectList(YerFis, "ST_FI", "FisDate");
    ViewBag.DropdownList = list;
}

1 Ответ

0 голосов
/ 26 февраля 2019

Вы почти наверняка пытаетесь использовать инфраструктуру сущностей строку соединения , чтобы открыть соединение через new SqlConnection, что не будет работать.

ЕслиЕсли вы посмотрите в файл web.config, вы, вероятно, увидите что-то похожее на:

<connectionStrings>
    <add name="Training_DatabaseEntities" connectionString="metadata=res://*/Entity.csdl|res://*.............provider=System.Data.SqlClient;provider connection string=............." />
</connectionStrings>

Вы можете попробовать выполнить синтаксический анализ строки подключения вручную, чтобы получить бит, который вам на самом деле нужен, краткий веб-поиск показывает, чтоEntityConnectionStringBuilder может быть полезен для его программного извлечения, вот пример того, как это делается в консольном приложении:

var connectionString = ConfigurationManager.ConnectionStrings["Training_DatabaseEntities"]
                       .ConnectionString;

var entityConnectionStringBuilder = new EntityConnectionStringBuilder(connectionString);
var sqlConnectionConnectionString = entityConnectionStringBuilder.ProviderConnectionString;

Console.WriteLine($"EF Connection String: {connectionString}");
Console.WriteLine($"SqlConnection Connection String: {sqlConnectionConnectionString}");

Это дает вывод (мой акцент):

Строка подключения EF: metadata = res: ///Models.Model1.csdl | res: ///Models.Model1.ssdl | res: //*/Models.Model1.msl; provider = System.Data.SqlClient; строка подключения провайдера = "источник данных = cntrra02-sql-rs; начальный каталог = Training_Database; интегрированная безопасность = True; MultipleActiveResultSets = True; App = EntityFramework"

SqlConnection ConnectionСтрока: источник данных = cntrra02-sql-rs; начальный каталог = Training_Database; встроенная защита = True; MultipleActiveResultSets = True; App = EntityFramework

, которая показывает строку подключения, которую можно передать в SqlConnection экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...