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

时间:2013-08-07 09:20:09

标签: c# asp.net database webforms dataset

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

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

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

你能建议我吗?

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

希望这能说明我对你的问题的评论。