【发布时间】:2019-03-26 14:02:09
【问题描述】:
我有一个注册表单、一个登录表单和一个主表单。程序从注册表单开始。如果我注册数据(姓名,电子邮件,密码)加载到本地数据库。当我正确登录时显示主窗体。主窗体有一个带有标签的用户控件。我想用她/他的名字在标签上写一个欢迎文字。示例:“欢迎乔希!”。所以我应该识别用户,所以我使用登录表单中的 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 = new personalFinance.Homepage1();它带有红色下划线。
【问题讨论】:
-
你有一个 SQL 注入漏洞。
-
在编写另一行代码之前,您需要阅读有关 sql 注入的内容。您的代码是开放的。我的朋友Bobbly Tables 喜欢这种东西。您还需要将命令和连接对象(以及任何其他实现 IDisposable 的对象)包装在 USING 语句中。当多人使用此应用程序时,您在此处的代码会占用您的连接池。
-
谢谢您的帮助!
-
添加了参数+更好的构造函数+正确处理的答案。我鼓励阅读 a) SQL 注入。 b) 非托管资源(IDisposable)
-
您可能希望将
SELECT email FROM ...更改为SELECT userName FROM ...
标签: c# sql-server winforms user-controls