mysql datareader没有找到行c#

时间:2014-04-27 12:47:34

标签: c# mysql datareader

我有一个关于c#和mysql的问题。我想创建一个连接到我的本地数据库的非常简单的登录表单。我得到了连接工作(测试它),但我在读取从select返回的数据时遇到问题。

我试图将ID放入字符串中以便显示它(这仅用于测试)。现在我在谷歌搜索了很多,几乎每个人都有这样的东西。当我执行它不会给出错误但我的sqldatareader什么也没找到。在第一个,如果我问它是否有任何行,但没有。

我做错了什么?我的用户名/密码确实存在于我的数据库中。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;


namespace eindwerk
 {
  public partial class LoginForm : Form
   {
    string myConnection = "Server=localhost;Database=mydb;Uid=root;Pwd=root;";
    MySqlCommand cmd;
    MySqlConnection connection;

    public LoginForm()
    {
        InitializeComponent();
        connection  = new MySqlConnection(myConnection);

        connection.Open();
    }

    private void loginForm_Load(object sender, EventArgs e)
    {
        this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
                       (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);
    }

    private void btnLogin_Click(object sender, EventArgs e)
    {

        try
        {
            cmd = connection.CreateCommand();
            cmd.CommandText = "SELECT idlogin FROM login WHERE (username='@username') AND (password='@password') LIMIT 1;";
            cmd.Parameters.AddWithValue("@username", txtbxLoginUsername.Text);
            cmd.Parameters.AddWithValue("@password", txtbxLoginPassword.Text);


            MySqlDataReader rdr = cmd.ExecuteReader();

            rdr.Read();
            if (rdr.HasRows)
            {
                while (rdr.Read())
                {
                    label1.Text = rdr.GetInt32("idlogin").ToString();
                }
            }
            else
            {
                lblLoginError.Visible = true;
            }


            rdr.Close();

        }
        catch {
            lblLoginError.Text = "Nope";
            lblLoginError.Visible = true;
        }


    }
}

}

3 个答案:

答案 0 :(得分:1)

您多次致电Read()。调用While(Reader.Read())单次时间并按if(rdr.HasRows()){}检查结果,以便检查结果是否返回或响应中没有任何内容。

答案 1 :(得分:0)

您只返回1行,但您正在调用Read()两次。在查看数据之前,您的行有效被丢弃。

答案 2 :(得分:0)

经过长时间的搜索,我发现了问题!在我的SQL查询中,我输入username =' @ username',存在问题。你不能使用单引号!!!我删除了引号,效果很好。

这就是你在谷歌的第三页上信任搜索结果所得到的......

感谢所有人!