4

ログインフォームをリモートサーバーに接続したいC#アプリを開発しようとしています。サーバーに接続しましたが、ログインしようとすると、次の行が表示されます。MySqlDataReader reader = cmd.ExecuteReader(); エラーが発生しました:不明な列「admin」のwhere clauseどこから問題が発生する可能性があるかわかりますか?これが私のコードです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace ECBSRecruitmentAgencySoftware
{
    public partial class LogIn : Form
    {
        public LogIn()
        {
            InitializeComponent();
        }  

        public bool tryLogin(string username , string password)
        {
             MySqlConnection con = new MySqlConnection("host=aaaaaaaa.baaadsg;user=saaaaaak;password=2333333336;database=soaaaaaaaa2;");
             MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = `" + username + "` AND user_password = `" + password + "`;");
             cmd.Connection = con;
             con.Open();
             MySqlDataReader reader = cmd.ExecuteReader();
             if (reader.Read() != false)
             {
                 if (reader.IsDBNull(0) == true)
                 {
                     cmd.Connection.Close();
                     reader.Dispose();
                     cmd.Dispose();
                     return false;
                 }
                 else
                 {
                     cmd.Connection.Close();
                     reader.Dispose();
                     cmd.Dispose();
                     return true;
                  }
             }
             else 
             {
                 return false;
             }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (tryLogin(user.Text, pass.Text) == true)
            {
                MainScreen F2 = new MainScreen();
                F2.Show();
                this.Hide();
            }            
            else 
                MessageBox.Show("Wrong details!");             
        } 
    }
 }
4

3 に答える 3

3

'(`)の代わりに使用するクエリ引用文字列

Select * FROM niki WHERE user_name = '" + username + "' AND user_password = '" + password + "'
于 2012-05-16T17:01:00.300 に答える
3

これを試して:

MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = '" + username + "' AND user_password = '" + password + "'");

名前が予約名の場合、`はテーブルと列の名前を参照します。たとえば、tbl.`from`は、SQLの予約語FROMではなく、「from」という列を参照します。

これが、コマンドで「admin」が見つかったときに「admin」という列を参照しているとMySQLが判断しているため、無効な列名「admin」を示すエラーメッセージが表示される理由です。もちろん、ログインフォームのユーザー名として「admin」を入力していると推測しても賞品はありません。:)

于 2012-05-16T17:01:19.790 に答える
2

ソリューションの代わりに名前付きパラメーターを使用します。

MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = @username AND user_password = @password");
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);

UPD:UnhandledExceptionが言ったようにAddWithValueに更新されました

于 2012-05-16T17:02:48.150 に答える