-1

我收到错误

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!");
            }
        }
    }
}
4

2 回答 2

2

始终使用参数来避免 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);

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

于 2013-10-29T16:48:33.227 回答
0

我对连接到 Access 了解不多,但这里有一些您可能想要检查的典型问题:

  • 检查表列的数据类型——“ID”真的是一个字符串吗?
  • 检查列名是否是访问中的保留关键字(尤其是“密码”)
  • 如果单元格值为空(使用“Nz”),访问可能会出现一些问题
于 2013-10-29T16:57:51.593 回答