C# C MySQL读卡器错误-“Sql语法错误”
我目前正在尝试使用C语言的Visual Studio WPF应用程序创建登录系统。每次登录按钮单击功能运行时,我都会收到一条错误消息。错误消息显示特定代码行var DataReader=TeacherLoginsCommand.ExecuteReader 我看过无数的视频,很多视频似乎都在做同样的事情,没有任何问题。感谢您的帮助 C代码:C# C MySQL读卡器错误-“Sql语法错误”,c#,mysql,database,wpf,visual-studio,C#,Mysql,Database,Wpf,Visual Studio,我目前正在尝试使用C语言的Visual Studio WPF应用程序创建登录系统。每次登录按钮单击功能运行时,我都会收到一条错误消息。错误消息显示特定代码行var DataReader=TeacherLoginsCommand.ExecuteReader 我看过无数的视频,很多视频似乎都在做同样的事情,没有任何问题。感谢您的帮助 C代码: using System; using System.Collections.Generic; using System.Linq; using System
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MySql.Data.MySqlClient;
using System.Data;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow(){
InitializeComponent();
}
//When Login Button Is Clicked Do:
private void Login_Button_Click(Object sender, RoutedEventArgs e){
//Gets Username And Password From Loing Screen
string TeacherID = Teacher_ID.Text;
string TeacherPassword = Teacher_Password.Password;
//Connects To Database And Gets All Teacher Logins
string connectionString = "SERVER=localhost;DATABASE=teacherlogins;UID=root;PASSWORD=Password";
MySqlConnection TeacherLoginsConnection = new MySqlConnection(connectionString);
string CurrentQuery = "SELECT * from teacherloginstable where ID = " + Teacher_ID;
MySqlCommand TeacherLoginsCommand = new MySqlCommand(CurrentQuery, TeacherLoginsConnection);
TeacherLoginsConnection.Open();
var DataReader = TeacherLoginsCommand.ExecuteReader();
DataTable TeacherLoginsTable = new DataTable();
TeacherLoginsTable.Load(DataReader);
TeacherLoginsConnection.Close();
if (TeacherLoginsTable.Rows.Contains(TeacherPassword))
{
MessageBox.Show("Login Sucsessful", "Welcome" + Teacher_ID);
}
else {
MessageBox.Show("Details Not Recognised", "Error: Details Not Recognised");
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
}
而不是:
string TeacherID = Teacher_ID.Text;
写
教师ID是XAML代码中的一个文本框ID x:Name,它引用一个文本框。您必须在sql语句中发送其文本属性
Sql语句必须如下所示
从teacherloginstable中选择*,其中ID=+Teacher\u ID.Text 你是自己不幸决定的受害者,给两个不同目的的变量起了非常相似的名字 你有一个名为Teacher_ID的文本框,你把这个文本放在TeacherID中。您是否可能在查询中使用了错误的选项 您是否尝试过使用调试器或使用Debug.WriteLine或Console.WriteLine检查发送到MySQL的SQL查询字符串?我想你会看到如下情况: 从teacherloginstable中选择*,其中ID=System.Windows.Controls.TextBox System.Windows.Controls.TextBox是您在文本框上调用字符串时得到的 你看到问题了吗 您可以使用正确的变量名来修复它:
string CurrentQuery = "SELECT * from teacherloginstable where ID = " + TeacherID;
但真的,请不要这样做。请不要通过在中串联值来建立SQL字符串。最好改用参数化SQL:
string CurrentQuery = "SELECT * from teacherloginstable where ID = @teacherID";
MySqlCommand TeacherLoginsCommand = new MySqlCommand(CurrentQuery, TeacherLoginsConnection);
TeacherLoginsCommand.Parameters.AddWithValue("@teacherID", TeacherID);
这是传递参数的错误方法,您不需要将读取器保存到新变量。ExecuteReader将填充数据表。否则,请检查表的名称和所有内容。视频不能很好地代替真实的视频documentation@Plutonix这就是我最初尝试的,它也给了我同样的错误。你的数据库表中ID的数据类型是什么?它是一个int,范围是1-3ah好的,我现在看到问题了。谢谢你的帮助。我知道这似乎是一个新手的错误,但那只是因为我是一个新手XD。
int TeacherID = Convert.toInt32(Teacher_ID.Text);
string CurrentQuery = "SELECT * from teacherloginstable where ID = " + TeacherID;
string CurrentQuery = "SELECT * from teacherloginstable where ID = @teacherID";
MySqlCommand TeacherLoginsCommand = new MySqlCommand(CurrentQuery, TeacherLoginsConnection);
TeacherLoginsCommand.Parameters.AddWithValue("@teacherID", TeacherID);