2

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

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

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

你能给我建议吗?

谢谢

4

2 回答 2

4

对于仅从数据库中获取一条记录或从数据库中获取一条记录,“数据阅读器”是很好的方法。查看以下站点您可以清楚地了解数据阅读器的想法。

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

于 2013-08-07T09:30:14.423 回答
3

这是一个代码片段(这是针对 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。

希望这将说明我对您的问题的评论。

于 2013-08-07T09:38:20.127 回答