C# Property get set 不设置值

标签 c# sql .net sql-server

我在 Google 和 Stack Overflow 上搜索了我遇到的这个问题。 很遗憾,我无法找到问题的正确答案。

首先,我将展示我的类和 App.config。

类:Form1:表单

public partial class Form1 : Form
{
    Database db = new Database();

    public Form1()
    {
        InitializeComponent();
        db.Test();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        db.MdfConnectionString = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;
    }
}

类:数据库

class Database
{
    private string _mdfConnectionString;

    public string MdfConnectionString
    {
        get { return this._mdfConnectionString; }
        set { this._mdfConnectionString = value; }
    }

    public void Test()
    {
        MessageBox.Show(_mdfConnectionString);
    }

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
      <add name="MDFConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Database\AutoFill.mdf;Integrated Security=True;ApplicationIntent=ReadOnly" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

在我的类(class) Database.cs 中,我有一个 MessageBox.Show(_mdfConnectionString); 它将显示私有(private)字符串(支持字段),但是,对于一些奇怪的_mdfConnectionString 始终为空的原因。

我已经在我的类 Form1 : Form 上声明它需要在我的 App.config 中加载连接字符串。

不要忘记提及 ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString; 本身会返回一个值,因此这不是这里的问题。

希望有人能帮我解决这个问题。

编辑 1

更改了代码以使人们更清楚。此外,ExecuteQuery 并不重要,因此我在 Database.cs 类中创建了一个调用消息框的简单方法。

此外,可执行文件和 Exe.config 在执行时位于同一文件夹内。

最佳答案

我没有确切的答案,但在同样的情况下我会问自己几个问题。

  1. 连接字符串是否真的获得了?即,将解决方案分开一点以便调试,如下所示在 myConn 上添加一个断点。

    private void Form1_Load(object sender, EventArgs e) {

    var myConn = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString; db.MdfConnectionString = myConn;

  2. 您当前的设计解决方案允许在没有连接字符串的情况下使用数据库类。将连接放入构造函数以消除潜在的错误会更好吗?例如

    公共(public)类数据库 {

    私有(private)字符串_mdfConnectionString;

    公共(public)数据库(字符串连接)

    {

    _mdfConnectionString = conn;

    ...

然后您可能希望在表单加载时构建它。

  1. 对于网络内容,有时您并不是在处理您认为正在处理的实例。如果一切都失败了,您可以尝试将类更改为单例,但依赖注入(inject)样式应该更好。

编辑 - 在您的编辑之后,我相信您现在正在加载表单之前调用测试。请尝试第 2 点(将连接字符串注入(inject)构造函数),然后您就知道您不能拥有没有连接字符串的类实例。我已经在控制台中试过你的类(class),没问题,所以问题很可能是加载顺序。 DI 会解决这个问题。

关于C# Property get set 不设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29668543/

相关文章:

c# - 使 EF Core 2 使用仅 getter 属性,无需支持字段

c# - 提高选择列表时的性能

sql - 根据SQL语句的select子句中的列顺序进行优化

mysql - 仅 JOIN 每行一次 — 将第 1 行排列(分布)到第 1 行

c# - 将 SMO 应用程序部署到未安装 SQL Server 2008 的工作站

c# - 如何为具有集合的模型创建 View 模型

c# - 使用C#在Windows 7中模拟鼠标点击和鼠标移动

mysql - 如何在 SQL 脚本中声明变量?

c# - 如何通过 docker 使用启动配置文件运行 .net 核心应用程序

C# 缩放 UserControl 内容以匹配用户 Dpi/字体大小