C# 将变量连接到另一个类

C# 将变量连接到另一个类,c#,sql,winforms,class,C#,Sql,Winforms,Class,所以我有一个小项目,我正在工作。基本上我想做的是创建另一个类,包括SQL连接和结果。然而,它告诉我: 名称“firstName”不存在 当我把它放在为VisualStudio中的designer模式创建的页面上时,它就消失了,开始工作了 info.cs: public void GetInfo(string accountNumber) { string source = helper.CnnVal("WorkflowConfiguration"); SqlConnection

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

名称“firstName”不存在

当我把它放在为VisualStudio中的designer模式创建的页面上时,它就消失了,开始工作了

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       
        }
namespace WindowsFormsApp1
{
公共部分类数据库:表单
{
列表人员=新列表();
private personalInfo personal=新建personalInfo();
公共数据库()
{
初始化组件();
}
public void searchBtn_单击(对象发送者,事件参数e)
{
dataAccess db=新的dataAccess();
people=db.GetPeople(accountNumber.Text);
ListBoxPeople.DataSource=人;
ListBoxPeople.DisplayMember=“FullInfo”;
//想从info.cs获取参考资料吗
}

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

除此之外,如果您需要访问表单上的控件(如
文本框
),我建议您在表单类本身内进行访问,除非您有很好的理由这样做。您将无法从表单类外引用内容(因为控件是
私有的
),即使您编写了一个方法来从窗体中提取控件,您也无法访问它们(它们将位于不同的线程上),除非您实现了一个算法来解决这个问题

因此,我建议您将
GetInfo
方法移动到表单类中。请注意,该类是一个
partial
类,这意味着您可以使用相同的类名创建一个新的类文件,它将扩展您的表单类,更好地组织事情(这就是设计器代码生成所做的,因此不应该更改设计器文件上的内容)

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


注意:如果您打算这样做,请确保在另一个文件中也将类定义为
部分

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

除此之外,如果您需要访问表单上的控件(如
文本框
),我建议您在表单类本身内进行访问,除非您有很好的理由这样做。您将无法从表单类外引用内容(因为控件是
私有的
),即使您编写了一个方法来从窗体中提取控件,您也无法访问它们(它们将位于不同的线程上),除非您实现了一个算法来解决这个问题

因此,我建议您将
GetInfo
方法移动到表单类中。请注意,该类是一个
partial
类,这意味着您可以使用相同的类名创建一个新的类文件,它将扩展您的表单类,更好地组织事情(这就是设计器代码生成所做的,因此不应该更改设计器文件上的内容)

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


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

您需要在声明
firstName
的位置包含代码。此外,请格式化您的代码-更正缩进并删除所有额外的白色space@rory.ap它将出现在第二组代码中e在任何地方都没有firstName的声明。我知道当我将info.cs中的代码粘贴到第二组代码的引用位置时,它是有效的。你应该知道你的代码容易受到SQL注入攻击。使用参数化查询!不,你需要在问题中包含你的代码,这样我们才能看到它。你需要包含在您声明名字的地方编写代码。另外,请格式化您的代码-更正缩进并删除所有多余的白色space@rory.ap它将在第二组代码中。任何地方都没有firstName的声明。我知道,当我将info.cs中的代码粘贴到第二组代码的引用位置时,它会起作用。Yo你应该知道你的代码容易受到SQL注入攻击。使用参数化查询!不,你需要在问题中包含你的代码,这样我们才能看到它。因此更好的选择是,只将代码包含在其他类文件中?谢谢你的输入!是的。通常当你需要从窗体上的控件访问任何内容时,您可以从内部进行操作,特殊情况除外。感谢您的帮助和指导。我也能得到同样的帮助和指导