c# - problemas - "No coincide el tipo de datos en la expresión de criterios". Error
problemas con acentos en c# (1)
Obtengo un "No coinciden los tipos de datos en la expresión de criterios". error al ejecutar este código en una base de datos, pero funciona perfectamente bien en otra base de datos. Al intentar copiar la tabla relevante a otra base de datos y ejecutarla, el programa falla nuevamente.
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;
namespace Project
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
private void Login_Load(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void LoginButton_Click(object sender, EventArgs e)
{
DAL conn = new DAL(@"|DataDirectory|/ProjectDB.accdb");
DataSet ds = conn.GetDataSet("Select * from Secretarys where SecretaryUsername = "+UserNameBox.Text.ToString());
if (ds.Tables[0].Rows[0][0].ToString().Equals(PassowrdBox.Text))
MessageBox.Show("asd","sdfa");
}
}
}
La clase "DAL" que estoy usando.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.OleDb;
/// <summary>
/// Summary description for DAL
/// </summary>
public class DAL
{
private string dbPath;
private OleDbConnection conn;
private OleDbCommand command;
private OleDbDataAdapter adapter;
private string stQuery;
public DAL(string dbPath)
{
this.dbPath = dbPath;
string ConnectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", this.dbPath);
conn = new OleDbConnection(ConnectionString);
command = new OleDbCommand(stQuery, conn);
adapter = new OleDbDataAdapter(command);
}
public DataSet GetDataSet(string strSql)
{
DataSet ds = new DataSet();
command.CommandText = strSql;
adapter.SelectCommand = command;
adapter.Fill(ds);
return ds;
}
public bool InsertRow(string sqlInsert)
{
int rowsEffected;
command.CommandText = sqlInsert;
conn.Open();
rowsEffected = command.ExecuteNonQuery();
conn.Close();
return (rowsEffected > 0);
}
public string GetData(string strSql)//שולפת נתונים מהטבלת המשתמשים שנמצאת באקסס
{
string st = "";
DataSet ds = new DataSet();
command.CommandText = strSql;
conn.Open();
st = command.ExecuteScalar().ToString();
conn.Close();
return (st);
}
public void UpdateRow(string sqlInsert)//הוספת נתונים לטבלת החברים באקסס
{
command.CommandText = sqlInsert;
conn.Open();
command.ExecuteNonQuery();
conn.Close();
}
public void DeleteDataSet(DataSet ds)
{
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
adapter.DeleteCommand = builder.GetDeleteCommand();
conn.Open();
adapter.Update(ds);
conn.Close();
}
}
Con OleDb (mientras está usando) Desajuste de los criterios Por lo general, significa que los datos que está tratando de poner en la base de datos no se pueden aceptar porque la base de datos espera un tipo diferente de datos. (es decir, la base de datos espera un entero y le pasa un doble.) Puede ser un poco molesto, pero deberá verificar dos veces todos los tipos de datos de las columnas en la base de datos para asegurarse de que está enviando algo que pueda manejar.
En este caso ... ¿tal vez la columna de la base de datos de SecretaryUsername no es en realidad una cadena? Eso parece extraño, pero se sabe que sucede. Algunos diseñadores de DB nombrarán un campo como ese aunque contenga un número entero (para que coincida con un autonumber) Tendrás que mirar el tipo de datos esperado de las bases de datos para saber con certeza