Microsoft.Data.SqlClient.SQLException: ‘Не удается открыть базу данных «aspnet-53bc9b9d-9d6a-45d4-8429-2a2761773502», запрошенную логином. Ошибка входа в систему

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

Я получаю эту ошибку. У меня нет этой базы данных aspnet-xxx. моя строка подключения:

 "Connection": "server=LIMBUWAN\SANJOKSQL;database=TravelMateDB;Trusted_Connection=true;"
 

Я также ввел свой логин пользователя «Ошибка входа в систему для пользователя «LIMBUWAN sanli».» разрешение dbowner в SSMS.
Ошибка с выбросом кода
Из вывода:

в Microsoft.Data.SqlClient.SqlConnection.Откройте () в Microsoft.EntityFrameworkCore.SQLServer.Хранение.Internal.SqlServerConnection.OpenDbConnection (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Открыть (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.Команда отношения.ExecuteReader(relationcommandparameterobject parameterObject) в Microsoft.EntityFrameworkCore.Query.Внутренний.Операция 1.Enumerator.InitializeReader(DbContext _, Boolean result) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func SingleQueryingEnumerable 3, функция 3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable 1.Перечислитель.MoveNext() ClientConnectionId: adda3d11-f81a-42cc-bacb-baf34690c993 Номер ошибки: 4060, Состояние: 1, Класс: 11 Исключение: «Microsoft.Data.SqlClient.SQLException» в Microsoft.EntityFrameworkCore.Relational.dll В Microsoft произошло исключение типа «Microsoft.Data.SqlClient.SQLException».EntityFrameworkCore.Relational.dll, которая не была обработана в коде пользователя, не может открыть базу данных «aspnet-53bc9b9d-9d6a-45d4-8429-2a2761773502», запрошенную логином. Не удалось войти в систему. Не удалось войти в систему для пользователя «LIMBUWAN sanli».

Ошибка с выбросом кода.

 
    [AllowAnonymous]
    public class IndexModel : PageModel
    {
        private readonly AppDbContext _context;
        public List<SelectListItem> Country { get; set; }
        public IndexModel(AppDbContext context)
        {
            _context = context;
        }
        public void OnGet()
        {
            Country = GetCountry();
        }
        public List<SelectListItem> GetCountry()
        {
            var Country = _context.CoronaListCountries.ToList();
            List<SelectListItem> _Country = new List<SelectListItem>();
            foreach (var country in Country)
            {
                _Country.Add(new SelectListItem { Value = country.Id.ToString(), Text = country.Country });
            }
            return _Country;
        }
        public JsonResult OnGetGlobalChartData()
        {
            var globalData = _context.GlobalContexts.ToList();
            return new JsonResult(globalData);
        }
        public JsonResult OnGetSearch(int id)
        {
            var selectedCountry = _context.CoronaListCountries.Where(S => S.Id == id).ToList();
            return new JsonResult(selectedCountry);
        }
    }
}
 

Мой контекстный код

 public class AppDbContext : IdentityDbContext<ApplicationUser>
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        {
        }
        public DbSet<CoronaListCountryContext> CoronaListCountries { get; set; }
        public DbSet<GlobalCasesContext> GlobalContexts { get; set; }
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            builder.Entity<CoronaListCountryContext>().HasIndex(U => U.Country).IsUnique();
        }
    }
 

Комментарии:

1. Опубликуйте фактический код, который выдает. Вы уверены, что используете эту строку подключения, а не какую-либо другую, жестко запрограммированную? Возможно, вы настроили тестовое соединение? Также опубликуйте полный текст исключения, а не только первую часть сообщения

2. Привет @PanagiotisKanavos Я добавил изображение и вывод. Надеюсь, этого достаточно. У меня есть только одна строка подключения.

3. Опубликуйте код , а не изображение кода. Изображения нельзя копировать, компилировать или искать в Google. Поскольку вы используете ядро EF, вам также необходимо опубликовать конфигурацию контекста, в частности ту часть, в которой вы настраиваете соединение. Так или иначе, вы получите неправильную строку подключения.

4. Вы уверены ? Вы не опубликовали код, который фактически настраивает строку подключения и регистрирует DbContext — вызов Startup..cs AddDbContext . Откуда он загружает строку подключения? Поставьте там точку останова и проверьте, какова реальная строка подключения. Если вы использовали однострочную строку для настройки, ie .UseSqlServer(Configuration.GetConnectionString("...")) извлеките строку подключения в переменную и проверьте ее. Это не то, что вы думаете

5. @thesystem Да, я сделал. Я думаю, что тогда для меня проблемой была неправильная конфигурация БД при публикации. Я думаю, что я решил это, используя правильную базу данных в параметрах публикации Windows. Надеюсь, это имеет смысл.

Ответ №1:

Если не удается установить доверенное соединение. Попробуйте использовать стандарт, в котором вы указываете пользователя и пароль

 Server=myServerNamemyInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
 

Комментарии:

1. Стандартный способ — использовать учетную запись Windows, а не логины SQL. Изменение типа аутентификации также не исправит попытку подключения к неверной базе данных

2. Эта строка подключения может использоваться только для входа в систему SQL, а не для учетных записей Windows. В этом случае соединение устанавливается с локальным сервером с использованием локальной учетной записи, поэтому проверка подлинности Windows будет работать до тех пор, пока база данных верна и у пользователя есть разрешения