简体   繁体   English

Access DB数据类型不匹配

[英]data type mismatch using Access DB

I keep getting a 'data type mismatch in criteria expression' when trying to insert into my Access 2010 table. 尝试插入Access 2010表时,我不断收到“条件表达式中的数据类型不匹配”的信息。 The table has field names of: GradeKey - AutoNumber, Grade - Text, Comments - Text, TellerNum - Number, TestName - Text. 该表的字段名称为:GradeKey-自动编号,成绩-文本,注释-文本,TellerNum-数字,TestName-文本。 The TestName is also a foreign key from another table. TestName还是另一个表的外键。 Any ideas on what I need to use to fix the data type mismatch? 我需要使用什么来解决数据类型不匹配的任何想法?

using (OleDbConnection con = new OleDbConnection(constring))
        {
            try
            {

                string cmdstring = "INSERT INTO GRADE (Grade, Comments, TellerNum, TestName) VALUES (@grade, @comments, @teller, @test)";
                using (OleDbCommand cmd = new OleDbCommand(cmdstring, con))
                {
                    cmd.Parameters.AddWithValue("@teller", OleDbType.Integer).Value = comboBox5.Text;
                    cmd.Parameters.AddWithValue("@grade", OleDbType.Char).Value = textBox7.Text;
                    cmd.Parameters.AddWithValue("@comments", OleDbType.Char).Value = textBox10.Text;
                    cmd.Parameters.AddWithValue("@test", OleDbType.Char).Value = comboBox16.Text;

                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("Submitted Successfully");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed due to " + ex.Message);
            }
        }

OleDbType.Integer应该是一个整数, OleDbType.IntegercomboBox5.Text解析为int:

cmd.Parameters.AddWithValue("@teller", OleDbType.Integer).Value = int.Parse(comboBox5.Text);

OleDb does not support named parameters. OleDb不支持命名参数。 It only supports positional parameters. 它仅支持位置参数。 You need to add your parameters in the same order as they appear in the query: 您需要按照查询中出现的顺序添加参数:

cmd.Parameters.AddWithValue("@grade", OleDbType.Char).Value = textBox7.Text;
cmd.Parameters.AddWithValue("@comments", OleDbType.Char).Value = textBox10.Text;
cmd.Parameters.AddWithValue("@teller", OleDbType.Integer).Value = comboBox5.Text;
cmd.Parameters.AddWithValue("@test", OleDbType.Char).Value = comboBox16.Text;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM