我有一个关于C#和mysql的问题。我想制作一个非常简单的登录表单,该表单已连接到本地数据库。我已连接正常工作(经过测试),但是在读取从选择返回的数据时遇到问题。
我正在尝试将ID放入字符串中,以便可以显示它(这仅用于测试)。现在,我在Google上搜索了很多东西,几乎每个人都有类似的东西。当我执行它不会给出错误,但是我的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;
}
}
}
}
最佳答案
您正在多次拨打Read()
。一次调用While(Reader.Read())
并通过if(rdr.HasRows()){}
检查结果,以检查结果是否返回或响应什么都没有。