我有一个注册表格,一个登录表格和一个Main表格。程序以注册表格开头。如果我注册数据(名称,电子邮件,密码),请加载到本地数据库。当我正确登录时,显示主要表格。主窗体具有带标签的用户控件。我想在标签上写上他/他的名字的欢迎文字。示例:“欢迎乔什!”。所以我应该识别用户,因此我使用登录表单中的textboxEmail.Text。我的解决方案不起作用。 有我的代码:
namespace personalFinance
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
var MainForm = new MainForm();
MainForm.Show();
HomepageUC hp = new HomepageUC(textboxEmail.Text);
hp.Show();
}
}
}
namespace personalFinance
{
public partial class HomepageUC : UserControl
{
string login = "";
public HomepageUC(string email)
{
InitializeComponent();
login = email;
var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB;
AttachDbFileName=|DataDirectory|database.mdf;");
conn.Open();
var cmd = new SqlCommand($"SELECT email FROM registration_data
WHERE email = '{login}'", conn);
var reader = cmd.ExecuteReader();
while (reader.Read()) labelWelcome.Text = reader[0].ToString();
}
}
}
我遇到了这个错误: 没有给出与“ HomepageUC.HomepageUC(string)” personalFinance C:\ Users \ nickname18 \ source \ repos \ personalFinance \ personalFinance \ MainForm.Designer.cs
所需的形式参数'email'相对应的参数。当我单击此错误时,检索到MainForm.Designer.cs this.HompageUC1 =新的personalFinance.Homepage1();用红色下划线。
答案 0 :(得分:0)
WinForms设计器通过调用默认控件来创建用户控件。因此,您不能定义这样的自定义构造函数。
相反,您应该创建一个自定义属性。
答案 1 :(得分:0)
电子邮件字段是否唯一?你已经调试了吗?是否发生任何错误? 该查询可能带来了多个记录或没有记录,并且该字段也为空。试试这个:
namespace personalFinance
{
public partial class HomepageUC : UserControl
{
string login = "";
public HomepageUC(string email)
{
InitializeComponent();
login = email;
var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB;
AttachDbFileName=|DataDirectory|database.mdf;");
conn.Open();
var cmd = new SqlCommand($"SELECT email FROM registration_data
WHERE email = '{login}'", conn);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
if(!string.IsNullOrEmpty(reader[0].ToString()))
{
labelWelcome.Text = reader[0].ToString();
break;
}
}
}
}
}
答案 2 :(得分:0)
您应该使用参数化查询并正确使用非托管资源。 using keyword
是实现IDisposable的简便方法public partial class HomepageUC : UserControl
{
string login = "";
public HomepageUC() // Default constructor for the designer/properties inicialization
{
InitializeComponent();
}
public HomepageUC(string email): this() // Your business logic constructor calls the default one
{
login = email;
var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB;
AttachDbFileName=|DataDirectory|database.mdf;");
conn.Open();
var cmd = new SqlCommand($"SELECT email FROM registration_data WHERE email = @email", conn);
cmd.Parameters.AddWithValue("@email", email); // Use parameters to avoid SQLi
var reader = cmd.ExecuteReader();
while (reader.Read()) labelWelcome.Text = reader[0].ToString();
conn.Close(); // Added unmanaged resources liberation
conn.Dispose();
}
}
}