【问题标题】:Can't read data from SqlDataReader无法从 SqlDataReader 读取数据
【发布时间】:2015-09-22 23:42:36
【问题描述】:

我正在尝试使用 c# 中的 DataReader 从数据库中读取数据。我遇到了一个错误,说没有数据存在。这是我的代码:

[WebMethod] //Login invoke 
    public string[] login(string u, string p) 
    {
        SqlConnection con = new SqlConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.ConnectionString = @"******Database.mdf";
        cmd.Parameters.AddWithValue("@u", u);
        cmd.Parameters.AddWithValue("@p", p);
        cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username='@u' AND pass='@p' ";

        int st = 555;
        string lastonline = "";

        try
        {
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            if (r.Read())
            {
                st = r.GetInt16(2);
                lastonline = r.GetString(3);
            }

            else
            {
                string[] x = new string[1] { "err" };
                return x;
            }

            r.Close();
            con.Close();
        }
        catch { }
        string[] arr = new string[3] { st.ToString(), lastonline, u };
        return arr;

不可能有两行具有相同的用户名和密码,所以我没有为r.Read(); 使用while 循环。 所有这些函数都获取用户名和密码,检查数据库是否有兼容的行,获取该行中的其余列并以字符串数组的形式返回它们。如果什么都没有(没有这样的用户),它会返回一个值为“x”的数组。问题是我总是得到“x”,当我强制它读取时,它会弹出我上面提到的错误。

注意事项: *我尝试单独运行该查询,它工作正常。 *我检查了“u”和“p”值是否与“username”和“pass”对应。他们这样做没有问题。 *在网上查了一下,在stackoverflow中,仍然没有什么适合我的问题。

有什么解决办法吗?

【问题讨论】:

    标签: c# sqldatareader datareader


    【解决方案1】:

    您只是不需要在参数化查询中的参数名称上加上引号:

      cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p";
    

    您的版本试图与@u 的用户名和@p 的密码进行实际匹配。

    【讨论】:

      【解决方案2】:

      这是因为您将用户名和密码与字符串 '@u''@p' 进行比较,而不是参数值 @u@p

      去掉参数周围的撇号:

      cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p ";
      

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多