C# 我希望能够使用id或用户名验证登录表单,同时使用c从mysql数据库获取数据#
我正在做一个项目,所以我决定尝试一些CRUD操作,以便能够操纵我的数据库 我已经创建了一个表单将数据插入到数据库中,它工作正常,但我发现创建read表单很困难C# 我希望能够使用id或用户名验证登录表单,同时使用c从mysql数据库获取数据#,c#,xampp,C#,Xampp,我正在做一个项目,所以我决定尝试一些CRUD操作,以便能够操纵我的数据库 我已经创建了一个表单将数据插入到数据库中,它工作正常,但我发现创建read表单很困难 public int login(string id, string name) { MySqlDataReader dr; int i = 0; try { string query = "SELECT * FROM `all_data` WHERE admin_ID=@id and ad
public int login(string id, string name)
{
MySqlDataReader dr;
int i = 0;
try
{
string query = "SELECT * FROM `all_data` WHERE admin_ID=@id and admin_Name=@name;
open_conn();
MySqlCommand cmd = new MySqlCommand(query,conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name",name);
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
return i;
}
这就是我感到困惑的地方,因为我希望它从我的数据库中读取,并检查它是否与我的输入匹配。
如果匹配,则应执行操作。。可能会显示一个消息框,上面写着“登录成功”。首先,不要通过直接连接id和名称来构建查询。这将引入SQL注入漏洞
string query = "SELECT * FROM `all_data` WHERE admin_ID='"+id+ "' and admin_Name='"+name+"' ";
相反,请使用参数化查询
string query = "SELECT * FROM `all_data` WHERE admin_ID=@id and admin_Name=@name";
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name",name);
接下来,我们只需要检查记录是否与输入匹配。
因此,我们可以将查询更改为下面,以查看有多少记录匹配
string query = "SELECT COUNT(*) FROM `all_data` WHERE admin_ID=@id and admin_Name=@name";
最后,我们可以使用ExecuteScalar()来获取计数,而不是ExecuteReader()。如果计数大于0,我们知道匹配成功
int matchingRecords = (int).ExecuteScalar();
if (matchingRecords > 0) {
// Logic for successful match
}
-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-签出