在 eecute reader 上收到错误,表明我的 sql 语法不正确

Posted

技术标签:

【中文标题】在 eecute reader 上收到错误,表明我的 sql 语法不正确【英文标题】:Receiving error on eecute reader that my sql syntax is incorrect 【发布时间】:2020-05-01 07:51:47 【问题描述】:

我猜问题是我在一个命令中有两个单独的查询。有没有办法解决这个问题?

连接字符串中填充了示例数据,但连接正确。

我也知道将连接字符串放在实际文件中并不安全,但目前这是出于测试目的。

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

namespace Multiple_forms

    public partial class Register : Form
    
        public Register()
        
            InitializeComponent();
        

        private void registerSubmitButton_Click(object sender, EventArgs e)
        
            string myConnection = "Server=localhost;Database=Houses;Uid=user;Pwd=password;";
            MySqlConnection myConn = new MySqlConnection(myConnection);

            string selectQuery = "Select * from users where RegistrationKey = '" + this.regKeyTextBox.Text + ";" + "UPDATE users set UserName = '" + this.regUsernameTextBox.Text.ToLower() +
                                 "', Password = '" + this.regPasswordTextBox.Text + "', Email ='" +
                                 this.regEmailTextBox.Text + "' WHERE RegistrationKey = '" + this.regKeyTextBox.Text +
                                 "';";

            string inputPass = this.regPasswordTextBox.Text;
            string inputPassConfirm = this.regPasswordConfirmTextBox.Text;

            MySqlCommand selectCommand = new MySqlCommand(selectQuery, myConn);
            MySqlDataReader myReader;

            if (inputPass == inputPassConfirm)
            
                myConn.Open();
                myReader = selectCommand.ExecuteReader();



            int regCount = 0;
            while (myReader.Read())
            
                regCount = regCount + 1;
            

            if (regCount == 1)
                
                    MessageBox.Show("You have registered successfully!");
                
                else
                
                    MessageBox.Show("Invalid registration key.");
                
            
            else
            
                MessageBox.Show("Passwords don't match.");
                Thread.Sleep(2000);
                this.Close();
            
        
    

【问题讨论】:

我认为您的查询selectQuery 包含错误。 this.regKeyTextBox.Text 之后不要关闭引号 第一个错误,保存实际密码... 第二个错误:使用用户输入构建sql语句而不转义输入。 我知道第二个错误,这是目前的测试,但是第一个错误的替代方法是什么? @O'Cheezy 散列和加盐,永远不要这样存储密码。 【参考方案1】:

因为您收到 Sql 语法错误,我怀疑问题在于您的查询 selectQuery。如下所示,this.regKeyTextBox.Text 后面的引号没有闭合。

 string selectQuery = "Select * from users where RegistrationKey = '" + this.regKeyTextBox.Text + ";" + "UPDATE users set UserName = '" + this.regUsernameTextBox.Text.ToLower() +
                      "', Password = '" + this.regPasswordTextBox.Text + "', Email ='" +
                      this.regEmailTextBox.Text + "' WHERE RegistrationKey = '" + this.regKeyTextBox.Text +
                      "';";

尝试将查询更改为:

string selectQuery = "Select * from users where RegistrationKey = '" + this.regKeyTextBox.Text + "';" + "UPDATE users set UserName = '" + this.regUsernameTextBox.Text.ToLower() +
                      "', Password = '" + this.regPasswordTextBox.Text + "', Email ='" +
                      this.regEmailTextBox.Text + "' WHERE RegistrationKey = '" + this.regKeyTextBox.Text +
                      "';";

【讨论】:

我为一个小的语法错误感到愚蠢,但谢谢! 别着急,这种事情时有发生。【参考方案2】:

像这样更新它

string selectQuery = "Select * from users where RegistrationKey = '" + this.regKeyTextBox.Text + "';" + "UPDATE users set UserName = '" + this.regUsernameTextBox.Text.ToLower() +
                                 "', Password = '" + this.regPasswordTextBox.Text + "', Email ='" +
                                 this.regEmailTextBox.Text + "' WHERE RegistrationKey = '" + this.regKeyTextBox.Text +
                                 "';";

【讨论】:

以上是关于在 eecute reader 上收到错误,表明我的 sql 语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

在 javascript 模式下将连接器类型从 javascript 更改为 Database Reader?

错误报告 ExtJS 7.4.0 Ext.data.reader.Json

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

TensorFlow NaN 错误?

EC2服务器中的Python Geoip2 maxminddb.reader错误

(Express js)我应该如何在我的路由器中使用另一个模块? (我不断收到未定义的参考错误)