在Access数据库上插入数据时出现溢出错误

时间:2014-10-04 13:47:25

标签: c# database ms-access

            private void button1_Click(object sender, EventArgs e) {  

            try {

                    Connections.con.Open();
                    string str = "INSERT INTO `Employee` (`FirstName`, `LastName`, `Age`, `ContactNumber`, `Username`, `Password`) VALUES (?, ?, ?, ?, ?, ?)";
                    OleDbCommand cmd = new OleDbCommand(str, Connections.con);
                    cmd.Parameters.AddWithValue("@?", txtFirst.Text.ToString());
                    cmd.Parameters.AddWithValue("@?", txtLast.Text.ToString());
                    cmd.Parameters.AddWithValue("@?", txtAge.Text.ToString());
                    cmd.Parameters.AddWithValue("@?", txtCon.Text.ToString());
                    cmd.Parameters.AddWithValue("@?", txtUser.Text.ToString());
                    cmd.Parameters.AddWithValue("@?", txtPass.Text.ToString());
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("Registration Successful");
                    }
                    catch (Exception ex) { 
                          MessageBox.Show("Error" + ex);
                    }
                    finally { 

                    Connections.con.Close();
                    this.Dispose();
                    this.Close();
                    f1.Show(); 
       }          
    }

此代码应该保存用户将输入的名字姓氏年龄联系人号码用户名和密码,但问题是每当我点击按钮时弹出OVERFLOW异常错误..请帮助我一直在搜索解决这个问题,但我找不到答案

1 个答案:

答案 0 :(得分:1)

AddWithValue方法创建一个DataType等于传递值的参数 您传递字符串,以便使用DataType字符串创建参数 当您尝试在数字字段中插入该值时,这将无法正常工作。

将您的代码更改为

cmd.Parameters.AddWithValue("@?", txtFirst.Text);
cmd.Parameters.AddWithValue("@?", txtLast.Text);
cmd.Parameters.AddWithValue("@?", Convert.ToInt32(txtAge.Text));
cmd.Parameters.AddWithValue("@?", Convert.ToInt32(txtCon.Text));
cmd.Parameters.AddWithValue("@?", txtUser.Text);
cmd.Parameters.AddWithValue("@?", txtPass.Text);

作为第二个猜测,联系电话号码字段的类型为数字长 访问允许此类数量最多 2147483647

在这种情况下,你很可能有一个电话号码,当被解释为数字值时,这个数字大于此限制。结果你得到溢出错误。

我真的建议使用字符串作为联系号码,并且有足够的字符以容纳多个电话号码(30个字符)

作为旁注。我也会存储出生日期而不是明年,否则明年就会出现问题。