C# 当我试图使新表单中现有表单的变量可见时,它什么也不做

C# 当我试图使新表单中现有表单的变量可见时,它什么也不做,c#,winforms,C#,Winforms,我的代码是: private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Login l = new Login(); con.Open(); OleDbCommand cmd = new OleDbCommand("SELECT [secretcode] FROM UsrDet WHERE usrname = '" + l.GetUsrName() +"';",co

我的代码是:

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
   Login l = new Login();
   con.Open();
   OleDbCommand cmd = new OleDbCommand("SELECT [secretcode] FROM UsrDet WHERE usrname = '" + l.GetUsrName() +"';",con);
   OleDbDataReader dr = null;
   dr = cmd.ExecuteReader();
   while(dr.Read())
   {
      int sec = (int)dr["secretcode"];
      seccode.Visible = true;
      seccode.Text = sec.ToString();
   }
}

我想与用户将在登录表单中输入的用户名进行交叉检查,以生成一个密码,并使其在下一个表单中可见。当我在执行中单击linklabel时,它什么也不做

您似乎忘记显示
登录
表单,例如

Login l = new Login();
l.ShowDialog(); // block until the user closes the dialog
var userName = l.UsernameInput.Text;
// get secret code
但是,您应该尽量避免在UI线程上运行非UI操作,如DB查询,这主要是因为您会发现在该代码完成之前,您的UI将显示为“冻结”。相反,你应该考虑在新线程中释放这些东西,从而释放UI

var userName = l.UsernameInput.Text;
Task.Run<string>(() => 
{
    using (var con = new OleDbConnection("..."))
    using (var cmd = new OleDbCommand(con))
    {
        cmd.CommandText = "SELECT [secretcode] FROM UsrDet WHERE usrname = @username";
        cmd.Parameters.AddWithValue("@username", userName);
        con.Open();
        using (var dr = cmd.ExecuteReader())
        {
            while(dr.Read())
            {
                return dr["secretcode"].ToString();
            }   
        }
    }
}).ContinueWith((t) => 
{
    // update UI
    seccode.Visible = true;
    seccode.Text = t.Result;
}, TaskScheduler.FromCurrentSynchronizationContext());
var userName=l.UsernameInput.Text;
Task.Run(()=>
{
使用(var con=new OleDbConnection(“…”)
使用(var cmd=new OleDbCommand(con))
{
cmd.CommandText=“从UsrDet中选择[secretcode],其中usrname=@username”;
cmd.Parameters.AddWithValue(“@username”,username);
con.Open();
使用(var dr=cmd.ExecuteReader())
{
while(dr.Read())
{
返回dr[“secretcode”].ToString();
}   
}
}
}).ContinueWith((t)=>
{
//更新用户界面
seccode.Visible=true;
seccode.Text=t.Result;
},TaskScheduler.FromCurrentSynchronizationContext());

首先不显示登录表单,然后显示新表单以进行第二步验证。当用户登录时,将生成一个密码并将其存储在数据库中,为了进行双重检查,我想在下一个表单中显示该密码。@MauriousPaul“当我在执行中单击linklabel时,它什么也不做”是您所说的,也许你应该更具体一点…现在它说的是System。Action是void返回类型,所以它不能返回对象。现在它显示连接没有关闭。连接的当前状态是打开的。@MauriousPaul应该是
任务。运行
。连接错误是由于您从未关闭连接,我不知道您在哪里管理连接,因为您忽略了该代码,因此我不想关闭它,因为您在其他地方使用了它。。。