C# “条件表达式中的数据类型不匹配。” 错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14713299/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
"Data type mismatch in criteria expression." Error
提问by user2044047
I get a "Data type mismatch in criteria expression." error when running this code on one database but it works perfectly fine on another database. When trying to copy the relevent table to other database and run it from him the program fails again!
我收到“条件表达式中的数据类型不匹配”。在一个数据库上运行此代码时出错,但在另一个数据库上运行良好。当尝试将相关表复制到其他数据库并从他那里运行时,程序再次失败!
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");
}
}
}
The class "DAL" I'm using.
我正在使用的“DAL”类。
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();
}
}
回答by Skwiggs
With OleDb (as you are using) Criteria Mismatch Usually means that the data you are trying to put into the database can't be accepted because the database is expecting a different type of data. (i.e. the database expects an integer and you pass a double to it.) It can be a bit annoying but you'll need to double check all the datatypes of the columns in the database to make sure you are sending something it can handle.
使用 OleDb(正如您正在使用的)标准不匹配 通常意味着您尝试放入数据库的数据无法被接受,因为数据库需要不同类型的数据。(即数据库需要一个整数,而您向它传递一个双精度数。)这可能有点烦人,但您需要仔细检查数据库中列的所有数据类型,以确保您发送的是它可以处理的内容。
In this case... maybe the the database column of SecretaryUsername is not actually a string? That seems odd but it's been known to happen. Some DB designers will name a field like that even though it contains an integer (to match up with an autonumber) You'll have to look at the Databases's expected datatype to know for sure
在这种情况下......也许秘书用户名的数据库列实际上不是一个字符串?这看起来很奇怪,但众所周知它会发生。即使它包含一个整数(与自动编号匹配),一些 DB 设计人员也会这样命名一个字段,您必须查看数据库的预期数据类型才能确定