ASP.NET C#-使用数据集读取一行

本文关键字:一行 读取 数据集 NET C#- ASP | 更新日期: 2023-09-27 18:26:45

我正在C#中开发一个经典的WEBForms应用程序,当我必须对用户进行身份验证时,我会使用以下查询从SQL数据库读取用户数据:

SELECT userid,username,email,city FROM USERS where username='blablabla' and password='blablabla'

我想在我的方法中使用这个sql查询,该方法返回我在UserValue类中定义的DTO对象。我正在考虑使用dataset来填充执行查询的用户数据
这是正确的方法,还是使用dataset从查询中读取一行过于昂贵和无用?

你能给我建议吗?

感谢

ASP.NET C#-使用数据集读取一行

对于只从数据库中获取一条记录或从数据库中逐个获取记录,"数据阅读器"是一种很好的方法。查看下面的网站您可以在数据阅读器上获得清晰的想法。

http://www.aspdotnet-suresh.com/2012/10/aspnet-difference-between-datareader.htmlhttp://msdn.microsoft.com/en-us/library/haa3afyz.aspxhttp://www.akadia.com/services/dotnet_data_reader.html

这里有一个代码片段(这是针对MS SQL的,但其他风格的SQL应该类似)来说明我在评论中所说的内容:

using (SqlConnection con = new SqlConnection(connectionString))
{
    con.Open();
    SqlCommand cmd = new SqlCommand("SELECT userid,username,email,city FROM USERS where username=@username and password=@password", con);
    cmd.Paramters.AddWithValue("@username", username);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.CommandType = CommandType.Text;
    UserInfo info = new UserInfo();
    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        if (rdr.HasRows)
        {
            rdr.Read(); // get the first row
            info.UserID = rdr.GetInt32(0);
            info.UserName = rdr.GetString(1);
            info.Email = rdr.GetString(2);
            info.City = rdr.GetString(3);
        }
    }
}

此示例还显示了如何执行参数化查询,这对于防止SQL注入攻击至关重要。

此外,我不是在读取器中循环,而是检查它是否有行,如果有,我只读取第一行(由于您处理的是用户信息,理论上应该只有一行)并填充DTO。

希望这能说明我对你的问题的看法。