Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C MySQL读卡器错误-“Sql语法错误”_C#_Mysql_Database_Wpf_Visual Studio - Fatal编程技术网

C# C MySQL读卡器错误-“Sql语法错误”

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

我目前正在尝试使用C语言的Visual Studio WPF应用程序创建登录系统。每次登录按钮单击功能运行时,我都会收到一条错误消息。错误消息显示特定代码行var DataReader=TeacherLoginsCommand.ExecuteReader

我看过无数的视频,很多视频似乎都在做同样的事情,没有任何问题。感谢您的帮助

C代码:

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);