【问题标题】:'System.Data.OleDb.OleDbException: Data type mismatch in criteria expression.' error“System.Data.OleDb.OleDbException:标准表达式中的数据类型不匹配。”错误
【发布时间】:2017-01-21 01:05:52
【问题描述】:

当我运行程序并输入登录详细信息时,按下登录按钮后出现此错误:

“标准表达式中的数据类型不匹配。”在这个表达式 dr = cmd.ExecuteReader();

我是新手。怎么办?

namespace Inventory_System
{
    public partial class MainForm : Form
    {
      private OleDbConnection mycon;
      private OleDbDataReader dr=null;
      private OleDbCommand cmd=null;
      public MainForm()
      {
        mycon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\User\Documents\SharpDevelop Projects\Inventory System\inventory.mdb;Persist Security Info=False");
        InitializeComponent();  
      }
      void Button2Click(object sender, EventArgs e)
      {
        this.Close();
      }
      void Button1Click(object sender, EventArgs e)
      {
        mycon.Open();
        string cmdstr = "SELECT password FROM admin WHERE ID ='"+textBox1.Text+"' ";
        cmd = new OleDbCommand(cmdstr, mycon);
        dr = cmd.ExecuteReader();
        string[] login = new string[3];

        while (dr.Read())
        {
            login[3] = (dr["password"].ToString());
        }

        dr.Close();
        mycon.Close();

         if (maskedTextBox1.Text == login[3])
        {
           MessageBox.Show("LOG-IN SUCCESFUL!", "Confirmation Message");
           Form control = new MainForm();
           control.Show();
           this.Hide();
        }
        else
        {
            MessageBox.Show("LOG-IN FAILED!", "Confirmation Message");
        }
    }
}
}

【问题讨论】:

  • 如果 Id 是数字,您正在传递文本。始终使用 SQL 参数;永远不要将密码存储为明文 - 散列它们。

标签: c# ms-access


【解决方案1】:

密码是一个保留字,所以必须用括号括起来:

string cmdstr = "SELECT [password] FROM admin WHERE ID ='"+textBox1.Text+"'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多