2013-10-29 43 views
-1

即时得到错误OleDbException是未处理的 - 在条件表达式数据类型不匹配

OleDbException是未处理的 - 在标准数据类型不匹配的OleDbDataReader重新= 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!"); 
      } 
     } 
    } 
} 

回答

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); 

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

0

我不知道很多有关连接到访问,但在这里,你可能要检查一些典型问题:你的表列的

  • 检查数据类型 - 是“ID”真串?
  • 检查,如果COLUMNNAMES被保留在访问(尤其是“密码”)
  • 访问可能有一些问题,如果单元格值为空(用“的Nz”)
关键字
相关问题