带有MySql的C#窗口应用程序
本文关键字:窗口 应用程序 MySql 带有 | 更新日期: 2023-09-27 18:00:57
我从教程中复制了确切的代码,所有的连接构建都在工作,我的Sql select语句也在工作,只是Reader命令不起作用——Reader出现故障,并且没有增加Count值。
这是我的代码
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 WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string myConnection = "datasource= localhost;port=3306;username=root;password=2905";
MySqlConnection myConn = new MySqlConnection(myConnection);
MySqlCommand Selectcommand = new MySqlCommand("select *from mydb.supervisors where username='" + this.text1_txt + "' and password = '" + this.text2_txt + "';", myConn);
myConn.Open();
MySqlDataReader myReader;
myReader = Selectcommand.ExecuteReader();
int count = 0;
while (myReader.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("Yayyyy");
}
else if (count > 1)
{
MessageBox.Show("Duplicate Parameters - Accesss Denied");
}
else if (count == 0)
{
MessageBox.Show("UserName, Password Dont Match with Hostel");
myConn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
我想你是想写:
this.text1_txt.Text and this.text2_txt.Text
而不仅仅是CCD_ 1和CCD_。只使用this.text2_txt
将使用ToString()
方法从对象中获取字符串进行连接。
您应该使用参数。。。
MySqlCommand Selectcommand =
new MySqlCommand(
@"select * from mydb.supervisors
where username= @username and password = @password;", myConn);
Selectcommand.Parameters.AddWithValue("@username ", this.text1_txt.Text);
Selectcommand.Parameters.AddWithValue("@password", this.text2_txt.Text);
结果,您的查询很可能会产生一行或零行,但您可能需要尝试以下操作:
MySqlCommand Selectcommand =
new MySqlCommand(
@"select count(*) as numrows from mydb.supervisors
where username= @username and password = @password;", myConn);
int numrows = (int) Selectcommand.ExecuteScalar();
if (numrows == 1)
{
MessageBox.Show("Yayyyy");
}
...
您的MySql command
有一些问题,您忘记了*后面的空格。此外,如果您使用textbo
x中的username
和password
,则必须使用Text
属性。这就是为什么没有数据在读取,也没有计数增量。
MySqlCommand Selectcommand = new MySqlCommand("select * from mydb.supervisors where username='" + this.text1_txt.Text + "' and password = '" + this.text2_txt.Text + "';", myConn);
除了上面的注释之外,如果您只对返回的记录数感兴趣,那么您最好使用下面的SQL语句只返回记录数。如果只有几行,SELECT*FROM就可以工作,但如果您遇到一个记录数量非常多的表,那么SELECT*FROM将带回所有这些数据,并可能影响应用程序的性能;而COUNT(*(不返回数据。
SELECT COUNT(*) AS RECORD_COUNT
FROM MYDB.SUPERVISORS
WHERE ...
reader.Read();
if (reader[0] != 1)
{
MessageBox.Show("Access Denied");
return;
}
如果你真的必须保留"If"的堆栈,那么你应该考虑使用"SWITCH"。那个myConn.Close((;在最后一个IF内,所以当计数不是0 时不会被调用
我想这取决于你使用它的目的,但就我个人而言,如果我要拒绝访问(作为登录的一部分(,我永远不会解释访问被拒绝的原因,因为这可以帮助人们在不应该进入的时候进入。