Я получаю сообщение «Свойство ConnectionString не инициализировано». в моем приложении ASP.Net CoreC#

Место общения программистов C#
Ответить
Anonymous
 Я получаю сообщение «Свойство ConnectionString не инициализировано». в моем приложении ASP.Net Core

Сообщение Anonymous »


Мне очень сложно получить строку ConnectionString из файла appsettings.json. Я просмотрел множество примеров, но большинство из них используют Entity Framework или более старый пример StartUp.cs. Мое приложение не использует ни один из этих двух вариантов. Сейчас мой Void Main выглядит вот так.

public static void Main(string[] args) { вар строитель = WebApplication.CreateBuilder(args); конфигурация var = новый ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json").Build(); builder.Services.AddRazorPages(); builder.Services.AddSingleton(конфигурация); вар приложение = builder.Build(); если (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); приложение.UseHsts(); } приложение.UseStaticFiles(); приложение.UseRouting(); приложение.MapRazorPages(); приложение.Выполнить(); } Это мой файл DataAccess, в котором я пытаюсь прочитать строку подключения.

публичный класс DataAccess { частная статическая строка ConnectionString; частный только для чтения IConfiguration _configuration; общедоступный DataAccess (конфигурация IConfiguration) { _configuration = конфигурация; Connectionstring = _configuration.GetConnectionString("P51InvConnection"); } общедоступная статическая асинхронная задача ExecuteDataTableAsync( строка сохраненногоИмяПроцедуры) { return await ExecuteDataTableAsync(storedProcedureName, null!); } общедоступная статическая асинхронная задача ExecuteDataTableAsync( строка хранимаяПроцедура, параметры SqlParameter[]) { DataTable dt = по умолчанию; Console.WriteLine(строка подключения); пытаться { ожидайте Task.Run(() => { Консоль.WriteLine(); используя SqlConnection conn = new (строка подключения); конн.Открыть(); используя SqlCommand cmd = new (storedProcedure, conn); cmd.CommandTimeout = 3; cmd.ТипКоманды = ТипКоманды.СохраненнаяПроцедура; если (параметры != ноль) { foreach (параметр SqlParameter в параметрах) { cmd.Параметры.Добавить(параметр); } } использование SqlDataAdapter da = new (cmd); dt = новый DataTable(); да.Заполнить (дт); }); } поймать (Исключение ex) { Console.WriteLine(ex.ToString()); } вернуть DT; //?? throw new Exception("DataTable пуст или равен нулю"); } общедоступный статический параметр SqlParameter( строковое имя параметра, значение параметра объекта) { Параметр SqlParameter = новый() { Имя параметра = Имя параметра, Значение = Значение параметра }; возвращаемый параметр; } } Я получаю сообщение об ошибке

Свойство ConnectionString не инициализировано

в методе ExecuteDataTableAsync. Кроме того, я проверил, что моя строка подключения с именем P51InvConnection является appsettings.json.

Отредактировано, чтобы включить содержимое файла appsettings.json.

{ "Ведение журнала": { "LogLevel": { «По умолчанию»: «Информация», «Microsoft.AspNetCore»: «Предупреждение» } }, "AllowedHosts": "*", "Строки подключения": { "P51InvConnection": "Источник данных=xxx;Идентификатор пользователя=xxx;Пароль=xxx;Таймаут подключения=30;Шифровать=False;" } } Еще одно редактирование. Это первый вызов базы данных с использованием класса DataAccess, но я не думаю, что проблема здесь, потому что это работает, если я скопирую и вставлю строку подключения из настроек приложения в инициализацию SqlConnection.
public static async Task EntryList() { List enterList = new(); DataTable dt = await DataAccess.ExecuteDataTableAsync("[dbo].[OpenTransfer_Select]"); foreach (строка DataRow в dt.Rows) { Запись запись = новый() { Идентификатор = Convert.IsDBNull(строка[IdColumn]) ? 0 : Convert.ToInt32(строка[IdColumn]), UserId = Convert.IsDBNull(строка[UserIdColumn]) ? строка.Пусто : Convert.ToString(строка[UserIdColumn]), ItemNumber = Convert.IsDBNull(строка[ItemNumberColumn]) ? строка.Пусто : Convert.ToString(строка[ItemNumberColumn]), EntryDate = Convert.IsDBNull(строка[TransferDateColumn]) ? Convert.ToDateTime("01.01.1900") : Convert.ToDateTime(строка[TransferDateColumn]) }; записьList.Add(запись); } вернуть список записей; }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»