尝试从 C# 插入 Access 数据库时数据类型不匹配

Posted

技术标签:

【中文标题】尝试从 C# 插入 Access 数据库时数据类型不匹配【英文标题】:data type mismatch when trying to insert into an Access database from C# 【发布时间】:2017-09-18 11:53:00 【问题描述】:

我正在尝试插入访问数据库。除“passwordx”字段外,所有字段都有效,在该字段中,条件表达式中的数据类型不匹配。

string commandSql = "INSERT INTO Members ( lastName, firstName, id, dob, phone, areaCodeNo, adress, cityNo, zipCode, email, active,passwordx) VALUES ( @lastName, @firstName, @id, @dob, @phone, @areaCodeNo, @adress, @cityNo, @zipCode, @email, @active,@passwordx); ";
OleDbCommand command = new OleDbCommand(commandSql, connection);
command.Parameters.Add("@lastName", OleDbType.VarChar, 100).Value = mem.lastName;
command.Parameters.Add("@firstName", OleDbType.VarChar, 100).Value = mem.firstName;
command.Parameters.Add("@id", OleDbType.VarChar, 100).Value = mem.id;
command.Parameters.Add("@dob", OleDbType.VarChar, 100).Value = mem.dob;
command.Parameters.Add("@phone", OleDbType.VarChar, 100).Value = mem.phone;
command.Parameters.Add("@areaCodeNo", OleDbType.Integer, 100).Value = mem.areaCodeNo;
command.Parameters.Add("@adress", OleDbType.VarChar, 100).Value = mem.adress;
command.Parameters.Add("@cityNo", OleDbType.Integer, 100).Value = mem.cityNo;
command.Parameters.Add("@zipCode", OleDbType.VarChar, 100).Value = mem.zipCode;
command.Parameters.Add("@email", OleDbType.VarChar, 100).Value = mem.email;
command.Parameters.Add("@passwordx", OleDbType.VarChar, 100).Value = mem.password;
command.Parameters.Add("@active", OleDbType.Boolean, 100).Value = mem.active;

connection.Open();
affectedRows = command.ExecuteNonQuery();
connection.Close();

感谢您的帮助。

【问题讨论】:

拥有 =mem.password 而不是 =mem.passwordx 重要吗 不知道表架构很难说。 密码字段设置为短文本 列的确切类型是什么? @Olivier "Short Text" 是 Access 中的列类型。 【参考方案1】:

打乱最后两个参数以匹配您的 SQL 序列:

command.Parameters.Add("@active", OleDbType.Boolean, 100).Value = mem.active;
command.Parameters.Add("@passwordx", OleDbType.VarChar, 100).Value = mem.password;

布尔值没有长度。

【讨论】:

这是一个很好的观点。 OleDB 具有位置参数并忽略参数名称。错误的顺序意味着 Boolean 和 VarChar 参数混淆了,这解释了数据类型不匹配。

以上是关于尝试从 C# 插入 Access 数据库时数据类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用

从 C# 应用程序插入 Access 数据库失败

当我尝试通过 C# 将日期插入 Access 数据库时出现“INSERT INTO 语句中的语法错误”错误

尝试使用“插入”ms-access 数据库时出错

在C#中向access数据库中插入数据怎么出错了

C# 向Access数据库插入数据时提示INSERT INTO语法错误