You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Forms注册表单运行时报错,请求排查问题(附代码)

Windows Forms注册表单插入数据运行时错误排查

开发基于Windows Forms的注册表单项目,运行代码时触发OleDb相关异常,但代码编辑器无语法报错提示。

原代码:

private void button1_Click(object sender, EventArgs e)
{
    using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\RAV21001310\\OneDrive\\Database1.accdb;"))
    {
        try
        {
            connection.Open();
            using (OleDbCommand command = new OleDbCommand("insert into tblUser (Username,Password,Gender,Age,FirstName,Last name) values('"+username.Text+"','"+password.Text+"','"+gender.Text+"','"+age Text+"','"+FirstName.Text+"','"+lastname.Text+"')"))
            {
                
                command.ExecuteNonQuery();

                var login = new login();

                login.Show();

                this.Close();
            }

        }
        catch(Exception ex)
        {
            MessageBox.Show("error  " + ex);
        }
    }
}

问题排查与修复:

  • 字段名语法错误:Access数据库中,包含空格的字段名必须用方括号包裹,原SQL里的Last name需改为[Last name]
  • 控件引用拼写错误:代码中age Text存在空格,应为age.Text,此错误会导致运行时无法找到目标控件
  • 未关联数据库连接:创建OleDbCommand时未指定关联的数据库连接对象,需在构造方法中传入connection参数
  • SQL注入风险(优化项):直接拼接用户输入到SQL语句中存在严重安全隐患,建议改用参数化查询

修正后的代码示例:

private void button1_Click(object sender, EventArgs e)
{
    using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\RAV21001310\\OneDrive\\Database1.accdb;"))
    {
        try
        {
            connection.Open();
            // 参数化查询避免注入,同时修正字段名语法
            string sql = "INSERT INTO tblUser (Username, Password, Gender, Age, FirstName, [Last name]) VALUES (?, ?, ?, ?, ?, ?)";
            using (OleDbCommand command = new OleDbCommand(sql, connection))
            {
                // 绑定参数
                command.Parameters.AddWithValue("@Username", username.Text);
                command.Parameters.AddWithValue("@Password", password.Text);
                command.Parameters.AddWithValue("@Gender", gender.Text);
                // 转换Age为数值类型,匹配数据库字段类型
                command.Parameters.AddWithValue("@Age", int.Parse(age.Text));
                command.Parameters.AddWithValue("@FirstName", FirstName.Text);
                command.Parameters.AddWithValue("@LastName", lastname.Text);

                command.ExecuteNonQuery();

                var login = new login();
                login.Show();
                this.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("错误信息:" + ex.Message);
        }
    }
}

内容的提问来源于stack exchange,提问作者Abdi L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:10:28