OleDbException 未处理 - 条件表达式中的数据类型不匹配

本文关键字:数据类型 不匹配 表达式 未处理 条件 OleDbException | 更新日期: 2023-09-27 18:37:15

我收到错误

OleDbException 未处理 - 条件中的数据类型不匹配 表达

在 OleDbDataReader re = cmd.ExecuteReader() 行上,任何人都可以帮助我吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace posSystem
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {

            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userName.accdb");
            OleDbCommand cmd = new OleDbCommand("Select * From userAndPAss Where ID = '" + txtBoxUserName + "' and Password = '" + txtBoxPassword + "';", conn);
            conn.Open();
            OleDbDataReader re = cmd.ExecuteReader();
            if(re.Read()
            {
                MessageBox.Show("Login Successfull"); 

            }
            else{
            MessageBox.Show("Login NOT Successfull, Try again!");
            }
        }
    }
}

OleDbException 未处理 - 条件表达式中的数据类型不匹配

始终使用参数来避免 sql 注入:

OleDbCommand cmd = new OleDbCommand("Select * From userAndPAss Where ID = @id and Password = @password", conn);
cmd.Parameters.AddWithValue("@id", txtBoxUserName.Text);
cmd.Parameters.AddWithValue("@password", txtBoxPassword.Text);

您需要指定文本框的 Text 属性,而不是文本框控件本身。

我对连接到 Access 知之甚少,但以下是您可能需要检查的一些典型问题:

  • 检查表列的数据类型 - "ID"真的是一个字符串吗?
  • 检查列名是否是 Access 中的保留关键字(尤其是"密码")
  • 如果单元格值为空(使用"Nz")