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

注册表单数据无法写入SQL LocalDB的问题排查求助

问题分析与修复方案

1. 表单跳转逻辑错误

你在执行数据库存储操作之前就打开登录窗口并关闭当前注册窗口,这会导致后续数据库代码可能无法正常执行(窗口关闭后线程可能终止)。应将跳转代码移到数据存储成功之后。

2. SQL语句核心错误

  • 表名Table是SQL关键字,必须用方括号[Table]包裹,否则触发语法错误。
  • Values子句末尾多了一个多余逗号,导致SQL解析失败。
  • 直接字符串拼接SQL存在SQL注入风险,且易因数据格式(如日期、特殊字符)触发错误,必须改用参数化查询。
  • Id字段在数据库中是整数类型,字符串拼接时加单引号会导致类型不匹配;DOB是日期类型,直接传字符串可能因格式问题无法解析。

3. 数据库操作对象使用不当

用SqlDataAdapter执行插入操作不合适,应直接使用SqlCommand执行增删改语句。

4. 异常处理过于笼统

当前catch块仅提示错误,无法获取具体异常信息,不利于排查问题,应捕获并显示异常详情。


修正后的完整代码

using System;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace NEWNEABlackjack
{
    public partial class Register : Form
    {
        public Register()
        {
            InitializeComponent();
        }

        private void BtnRegistered_Click(object sender, EventArgs e)
        {
            string connection = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Users\m2101305\OneDrive - Middlesbrough College\NEW NEA\NEWNEABlackjack\NEWNEABlackjack\DBLogins.mdf; Integrated Security = True";
            
            // 先验证输入合法性
            if (string.IsNullOrWhiteSpace(IDtxtBox.Text) || !int.TryParse(IDtxtBox.Text, out int studentId))
            {
                MessageBox.Show("请输入有效的学院编号(整数)");
                return;
            }
            
            if (!DateTime.TryParse(DOBtxtBox.Text, out DateTime dob))
            {
                MessageBox.Show("请输入有效的出生日期格式");
                return;
            }

            using (SqlConnection conn = new SqlConnection(connection))
            {
                try
                {
                    // 参数化SQL语句,避免注入和类型错误
                    string query = @"INSERT INTO [Table] (Id, Username, FirstName, Surname, Password, Email, DOB) 
                                     VALUES (@Id, @Username, @FirstName, @Surname, @Password, @Email, @DOB)";
                    
                    SqlCommand cmd = new SqlCommand(query, conn);
                    // 添加参数并匹配数据库字段类型
                    cmd.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = studentId;
                    cmd.Parameters.Add("@Username", System.Data.SqlDbType.NVarChar).Value = UNtxtBox.Text;
                    cmd.Parameters.Add("@FirstName", System.Data.SqlDbType.NVarChar).Value = FNtxtBox.Text;
                    cmd.Parameters.Add("@Surname", System.Data.SqlDbType.NVarChar).Value = SNtxtBox.Text;
                    cmd.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar).Value = PasswordtxtBox.Text;
                    cmd.Parameters.Add("@Email", System.Data.SqlDbType.NVarChar).Value = EAtxtBox.Text;
                    cmd.Parameters.Add("@DOB", System.Data.SqlDbType.Date).Value = dob;

                    conn.Open();
                    int rowsAffected = cmd.ExecuteNonQuery();
                    if (rowsAffected > 0)
                    {
                        MessageBox.Show("数据保存成功");
                        ClearData();
                        // 数据保存成功后再跳转登录窗口
                        var myForm = new LOGIN();
                        myForm.Show();
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("数据保存失败,无行受影响");
                    }
                }
                catch (Exception ex)
                {
                    // 显示具体异常信息,方便排查
                    MessageBox.Show($"保存数据时出错:{ex.Message}\n{ex.InnerException?.Message}");
                }
                // using块会自动关闭连接,无需手动处理
            }
        }

        private void ClearData()
        {
            IDtxtBox.Text = "";
            UNtxtBox.Text = "";
            FNtxtBox.Text = "";
            SNtxtBox.Text = "";
            PasswordtxtBox.Text = "";
            EAtxtBox.Text = "";
            DOBtxtBox.Text = "";
        }
    }
}

额外建议

  • 密码不要明文存储,应使用哈希算法(如BCrypt)加密后再存入数据库,避免数据泄露风险。
  • 前端可添加输入验证(必填项检查、邮箱格式验证、密码强度验证等),提前过滤无效输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:20:26