【问题标题】:Connecting variables to another class将变量连接到另一个类
【发布时间】:2018-10-19 16:28:53
【问题描述】:

所以我有一个我正在做的小项目。基本上我想做的是创建另一个类,包括 SQL 连接以及结果。但是,它告诉我:

名称“firstName”不存在。

当我将它放在为 Visual Studio 中的设计器模式创建的页面上时,它会消失并正常工作。

info.cs

public void GetInfo(string accountNumber)
{
    string source = helper.CnnVal("WorkflowConfiguration");
    SqlConnection con = new SqlConnection(source);
    con.Open();

    string sqlSelectQuery = $"Select TOP 1 * From [Workflow Creation].[dbo].[ssFields] Where Field16 =" + int.Parse(accountNumber);
    SqlCommand cmd = new SqlCommand(sqlSelectQuery, con);
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        firstName.Text = (dr["Field1"].ToString());
        lastName.Text = (dr["Field2"].ToString());
        dateOfbirth.Text = (dr["Field3"].ToString());
        socialSecurity.Text = (dr["Field4"].ToString());
    }

    con.Close();               
}

我想引用“设计器”代码页。所以我可以参考下面的btn点击结果:

namespace WindowsFormsApp1
{
    public partial class dataBase : Form
    {
        List<Information> people = new List<Information>();
        private personalInfo personal = new personalInfo();

        public dataBase()
        {
            InitializeComponent();        
        }

        public void searchBtn_Click(object sender, EventArgs e)
        {
            dataAccess db = new dataAccess();

            people = db.GetPeople(accountNumber.Text);
            ListBoxPeople.DataSource = people;
            ListBoxPeople.DisplayMember = "FullInfo";

            //Would like to references here from info.cs       
        }

【问题讨论】:

  • 你需要在声明firstName的地方包含代码。
  • 另外,请格式化您的代码 - 更正缩进并删除所有多余的空格
  • @rory.ap 它将在第二组代码中。任何地方都没有 firstName 的声明。我知道,当我将 info.cs 中的代码粘贴到第二组代码的引用位置时,它可以工作。
  • 您应该知道您的代码容易受到 SQL 注入攻击。使用参数化查询!
  • 不,您需要在此处在您的问题中包含您的代码,以便我们看到它。

标签: c# sql winforms class


【解决方案1】:

您似乎在这里处理 Windows 窗体,因为您的主类是 Form。首先,我建议不要给与它们完全无关的表单名称。我习惯将我的应用程序的主要表单命名为MainForm,但您也可以使用,例如MyAppForm(您的应用程序名称加上单词Form)。

除此之外,如果您需要访问表单上的控件(例如 TextBox),我建议您在 Form 类本身中这样做,除非您具有出色的这样做的理由。您将无法从表单类外部引用事物(因为控件是 Private),即使您编写了从表单中提取控件的方法,您也无法访问它们(它们将是在不同的线程上),除非你实现一个算法来解决这个问题。

因此,我建议您将 GetInfo 方法移至表单类。请注意,该类是 partial 类,这意味着您可以创建一个具有相同类名的新类文件,它将扩展您的表单类,更好地组织事物(这就是 Designer 代码生成所做的,因此您为什么不应更改 Designer 文件中的内容)。

编辑:此外,如上所述,如果表单的上下文不适合您的方法,您还可以通过额外的公共可访问方法传递控件所需的数据。例如,您的 Form 事件可以调用该额外方法。

注意:如果您打算这样做,请务必在另一个文件中也将类定义为 partial

【讨论】:

  • 那么更好的选择是将代码包含在其他类文件中吗?感谢您的意见!
  • 是的。通常,当您需要从表单上的控件访问任何内容时,您可以从内部进行,特殊情况除外。
  • 感谢您的帮助和指导。通过删除几行并添加其他选项,我能够获得相同的结果。感谢您对此提供的帮助,并已将您的答案标记为最佳答案,因为您已经回答了。至于这一点,我在 cmets 部分也给了丹尼斯一些荣誉。
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2013-02-08
  • 2014-03-01
相关资源
最近更新 更多