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

C#执行SQL插入操作时报System.Data.SqlClient.SqlException异常如何解决

错误原因及修复方案
  • SQL语法错误:SQL Server 不支持直接使用带空格的标识符,无论是列名还是参数名:
    1. 你代码里INSERT语句的列名带空格,必须用方括号[]包裹才能被正确识别
    2. 参数名不允许包含空格,需要调整为无空格的命名格式(例:把@Registration Number改成@RegistrationNumber)
  • 逻辑错误:代码调用了两次cmd.ExecuteNonQuery(),会导致同一条记录被重复插入两次
  • 资源泄漏风险:未手动释放数据库连接、命令对象,长期运行会耗尽数据库连接池资源,建议使用using语句自动完成资源释放

修正后的代码
private void btnInsert_Click(object sender, EventArgs e)
{
    // 使用using自动释放连接资源
    using (SqlConnection conn = new SqlConnection(@"Data Source=TS-G5\SQLEXPRESS;Initial Catalog=EsoftProj;Integrated Security=True"))
    using (SqlCommand cmd = new SqlCommand(@"INSERT INTO SES 
        ([Registration Number], [Student Name], [Date of Birth], Gender, [Contact Number], [Course enrolled in]) 
        VALUES (@RegistrationNumber, @StudentName, @DateOfBirth, @Gender, @ContactNumber, @CourseEnrolledIn)", conn))
    {
        conn.Open();
        // 参数名去掉空格,和SQL语句里的占位符一一对应
        cmd.Parameters.Add("@RegistrationNumber", SqlDbType.Text).Value = RegNumTB.Text;
        cmd.Parameters.Add("@StudentName", SqlDbType.Text).Value = StudentNameTB.Text;
        cmd.Parameters.Add("@DateOfBirth", SqlDbType.Date).Value = DoBPick.Value.Date;
        cmd.Parameters.Add("@Gender", SqlDbType.Text).Value = GMale.Checked ? "Male" : "Female";
        cmd.Parameters.Add("@ContactNumber", SqlDbType.Text).Value = ContactNumTB.Text;
        cmd.Parameters.Add("@CourseEnrolledIn", SqlDbType.Text).Value = CourseEnrSel.GetItemText(CourseEnrSel.SelectedItem);
        
        // 只执行一次插入,用变量接收影响行数
        int affectedRows = cmd.ExecuteNonQuery();
        if (affectedRows > 0)
        {
            MessageBox.Show("Record inserted");
        }
        else
        {
            MessageBox.Show("Record failed");
        }
    }
}

排查小提示

后续遇到SqlException时,可以加try-catch块捕获异常,打印ex.Message即可看到具体的错误原因,比如是语法错误、权限不足还是连接失败,比单纯的异常类型提示更有参考价值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:48:03