如何使用构建器 (WebApplication.CreateBuilder) 使我的 connectionString 可用于我的 DataAccess 类

How do I make my connectionString available to my DataAccess Class using the builder (WebApplication.CreateBuilder)

提问人:Buck Hicks 提问时间:10/27/2023 更新时间:10/28/2023 访问量:65

问:

我在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");
}

我需要做些什么才能使该连接可用于我的方法?

ASP.NET 核心 连接字符串 C#-9.0

评论


答:

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>();
}

然后你就可以获取配置