提问人:Buck Hicks 提问时间:10/27/2023 更新时间:10/28/2023 访问量:65
如何使用构建器 (WebApplication.CreateBuilder) 使我的 connectionString 可用于我的 DataAccess 类
How do I make my connectionString available to my DataAccess Class using the builder (WebApplication.CreateBuilder)
问:
我在appsettings.json文件中设置了我的连接字符串,我可以使用Console.WriteLine在Main中看到它,所以我知道我正在正确地将其发送到程序.cs。
var builder = WebApplication.CreateBuilder(args);
string? constring = builder.Configuration.GetConnectionString("P51InvConnection");
Console.WriteLine(constring);
我认为接下来我需要做的是使用 Builder.Services 使其可用于应用程序的其余部分。具体来说,就是我的 DataAccess 类。到目前为止,我发现的每个示例都使用 EF Core,或者是 StartUp.cs 仍在使用的示例,我可以弄清楚如何使用 Program.cs 和没有 EF 使其工作。
这是我尝试读取连接字符串的 DataAccess 类中的方法。
public static async Task<DataTable> ExecuteDataTableAsync(string storedProcedure, params SqlParameter[] parameters)
{
DataTable? dt = default;
try
{
await Task.Run(() =>
{
Console.WriteLine();
using SqlConnection conn = new("Connection String Here");
conn.Open();
using SqlCommand cmd = new(storedProcedure, conn);
cmd.CommandTimeout = 3;
cmd.CommandType = CommandType.StoredProcedure;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
using SqlDataAdapter da = new(cmd);
dt = new DataTable();
da.Fill(dt);
});
}
catch (Exception ex)
{
LogError(ex);
}
return dt ?? throw new Exception("DataTable empty or null");
}
我需要做些什么才能使该连接可用于我的方法?
答:
2赞
GotStu
10/27/2023
#1
请确保项目中安装了 Microsoft.Extensions.Configuration 和 Microsoft.Extensions.Configuration.Json 包。 在 C# 代码中,可以使用 ConfigurationBuilder 类从 appsettings.json 文件中读取连接字符串。下面是一个示例:
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(\"appsettings.json\")
.Build();
string connectionString = 配置。GetConnectionString(“我的连接字符串”);
评论
0赞
Buck Hicks
10/27/2023
那么,我该如何引用 Void MAN() 之外的配置
0赞
Ruikai Feng
10/27/2023
#2
注入到你的目标类中,请遵循此文档IConfiguration
public class DataAccess
{
private readonly IConfiguration _configuration;
private static string connectionstring;
public DataAccess(IConfiguration configuration)
{
_configuration = configuration;
connectionstring = _configuration.GetConnectionString("P51InvConnection");
}
//use connectionstring in your target method
}
评论
0赞
Buck Hicks
10/27/2023
我的目标方法是静态的,所以我在 var connectionString = _configuration 上收到对象引用投诉。GetConnectionString(“P51InvConnection”);
1赞
Ruikai Feng
10/27/2023
嗨,@Buck希克斯,我已经修改了我的答案,它解决了你的问题吗?
1赞
mamad2559
10/28/2023
#3
在类中使用以下方法来获取服务static
private static IConfiguration GetConfiguration()
{
var _accessor = new HttpContextAccessor();
return _accessor.HttpContext!.RequestServices.GetRequiredService<IConfiguration>();
}
然后你就可以获取配置
评论