插入记录时“条件表达式中的数据类型不匹配”

Posted

技术标签:

【中文标题】插入记录时“条件表达式中的数据类型不匹配”【英文标题】:"Data type mismatch in criteria expression" when inserting record 【发布时间】:2014-04-26 00:17:57 【问题描述】:
  string strConnect = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=record.accdb";


        using (OleDbConnection con = new OleDbConnection(strConnect))
        
            con.Open();
            using (OleDbCommand cmd = new OleDbCommand("insert into Industry(cName,Amount,amt_type,cheqno,bankname,branchname,tDate) values(@cname,@amount,@amt_type,@chqnum,@bname,@bchname,@tdate)", con))
            
                cmd.Parameters.AddWithValue("@cname", name_txt.Text);
                cmd.Parameters.AddWithValue("@amount", Convert.ToDouble(amount_txt.Text));
                cmd.Parameters.AddWithValue("@amt_type", amt);
                cmd.Parameters.AddWithValue("@chqnum", cheque_txt.Text);
                cmd.Parameters.AddWithValue("@bname", bank_txt.Text);
                cmd.Parameters.AddWithValue("@bchname", branch_txt.Text);
                cmd.Parameters.AddWithValue("@tdate",     dateTimePicker1.Value.ToShortDateString());

                cmd.ExecuteNonQuery();


            
            con.Close();

我收到一条错误消息,提示 System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常

附加信息:标准表达式中的数据类型不匹配。 这可能是什么原因和错误在 cmd.ExecuteNonQuery(); 行。

有两个单选按钮在更改事件时接受输入文本不胜感激。

【问题讨论】:

你需要确保你绑定了正确的type值。我怀疑dateTimePicker1.Value.ToShortDateString() 可能会返回不兼容的内容,请尝试仅使用dateTimePicker1.Value(当然它可能是其他值/字段之一)。 【参考方案1】:

而是明确指定如下参数以消除错误:

SqlCommand command = new SqlCommand(commandText, connection); command.Parameters.Add("@ID", SqlDbType.Int); command.Parameters["@ID"].Value = customer

【讨论】:

这不一定会消除错误,尽管它会使预期的类型更加明显。按值添加参数将尝试推断类型(基于值),并且值转换具有一定的灵活性。 @user2865740 同意,但如果存在类型问题,它将消除可能的问题。它可能会解决它。【参考方案2】:

您正在使用AddWithValue,但您想将参数转换为双精度:

cmd.Parameters.AddWithValue("@amount", Convert.ToDouble(amount_txt.Text));

您应该让 ADO.NET 来匹配正确的数据类型:

cmd.Parameters.AddWithValue("@amount", amount_txt.Text);

【讨论】:

以上是关于插入记录时“条件表达式中的数据类型不匹配”的主要内容,如果未能解决你的问题,请参考以下文章

“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段

条件表达式中的数据类型不匹配

条件表达式中的数据类型不匹配

运行时错误 3464:条件表达式中的数据类型不匹配

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配

条件表达式 Oledb Access 数据库中的数据类型不匹配