【问题标题】:System.Configuration.ConnectionStringSettingsCollection.this[string].get returned null on ASP.Net CoreSystem.Configuration.ConnectionStringSettingsCollection.this[string].get 在 ASP.Net Core 上返回 null
【发布时间】:2020-08-26 20:06:06
【问题描述】:

当我尝试从数据库中检索我的数据时,我收到一个错误 Object reference not set to an instance of an object。我知道 EF 有一个我可以使用的 dbcontext,但我想尝试这种方法,因为我的同事使用这种方法。我可以很好地获取 ConnectionString,我在断点中看到了它,但是在那一行之后,我得到了错误:

System.Configuration.ConnectionStringSettingsCollection.this[string].get 返回 null

我的代码如下:

appsettings.json

"AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-MIHT9TM\\SQLEXPRESS;Database=react_db;User=sa;Password=OtlPHP07"
  }

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services
                .AddMvc(options =>
                {
                    options.EnableEndpointRouting = false;
                })
                .AddNewtonsoftJson()
                .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
                .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions.IgnoreNullValues = true;
                    options.JsonSerializerOptions.WriteIndented = true;
                });

            services.AddSingleton<IConfiguration>(Configuration);
        }

DepartmentController.cs

[Route("api/[controller]")]
    [ApiController]
    public class DepartmentController : ControllerBase
    {
        private readonly IConfiguration configuration;

        public DepartmentController(IConfiguration configuration)
        {
            this.configuration = configuration;
        }

        [HttpGet]
        public IActionResult Get()
        {
            DataTable table = new DataTable();
            string query = @"SELECT * FROM dbo.Departments";

            var conString = configuration.GetConnectionString("DefaultConnection");
            using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings[conString].ConnectionString))
            {
                using (var cmd = new SqlCommand(query, con))
                {
                    using (var da = new SqlDataAdapter(cmd))
                    {
                        cmd.CommandType = CommandType.Text;
                        da.Fill(table);
                    }
                }
            }
            
            return Ok(table);
        }
    }

我在这一行遇到错误:using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings[conString].ConnectionString))

编辑

这是 conString 的值

我什至尝试过这段代码...

var conString = configuration.GetConnectionString("DefaultConnection");
            using (var con = new SqlConnection(ConfigurationManager.AppSettings[conString].ToString()))

【问题讨论】:

  • 应该是:使用(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
  • DefaultConnection 在我的 appsettings.json 中,而不是在 WebConfig 中,先生。
  • “conString”变量的值是多少/
  • @LaxmiLalMenaria,请查看我的编辑
  • 你已经有了连接字符串,所以你可以直接使用 using (var con = new SqlConnection(conString))

标签: c# .net-core


【解决方案1】:

在 SqlConnection 上尝试使用在构造函数中传递的配置对象,而不是它的新实例。或者甚至更好的是你已经拥有的 conString 变量(它确实使用了构造函数上传递的配置实例)

【讨论】:

  • 我没有创建新实例,先生。我只是使用了通过的“配置”。无论如何,我尝试按照您的建议进行操作。我直接使用了连接字符串。像这样...conString2 = configuration.GetConnectionString("DefaultConnection");
  • 是的。对不起,我没有说清楚。我的意思是,在 SqlConnection 上只需使用 conString 变量而不是再次查找它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多