C# 我希望能够使用id或用户名验证登录表单,同时使用c从mysql数据库获取数据#

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

我正在做一个项目,所以我决定尝试一些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 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注入-签出