使用Access DB的数据类型不匹配

时间:2014-05-28 16:01:19

标签: c# sql

在尝试插入Access 2010表时,我一直在“条件表达式”中遇到“数据类型不匹配”。该表的字段名称为: GradeKey - 自动编号, 成绩 - 文字, 评论 - 文字, TellerNum - 数量, TestName - 文本。 TestName也是另一个表中的外键。关于我需要用什么来解决数据类型不匹配的想法?

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);
            }
        }

2 个答案:

答案 0 :(得分:2)

OleDbType.Integer应该是一个整数。尝试将comboBox5.Text解析为int:

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

答案 1 :(得分:0)

OleDb不支持命名参数。它只支持位置参数。您需要按照查询中显示的顺序添加参数:

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;