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

使用C#向数据库插入数据时出现语法错误,寻求解决方法

问题排查与修复

核心错误点

  1. SQL语法格式错误:INSERT语句的列名写法有误,你给每个列单独套了括号,正确格式是把所有列名放在同一个括号内,用逗号分隔。
  2. VALUES值拼接错误:你把所有文本框内容直接拼接成了一个字符串,没有为每个字段单独添加引号和分隔符,导致SQL解析时触发语法错误。
  3. 严重安全隐患:直接拼接用户输入会引发SQL注入攻击,这是数据库操作的大忌。

修正后的代码

using System.Data.SqlClient;
namespace testofinsertion
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string connString = "Data Source=DESKTOP-442L7TS;Initial Catalog=insertionincsharp;User ID=sa;Password=bilal";
            // 使用using自动释放连接资源
            using (SqlConnection conobj = new SqlConnection(connString))
            {
                try
                {
                    conobj.Open();
                    // 参数化查询,避免SQL注入和语法错误
                    string query = @"INSERT INTO user_registeration(user_name, email, course, age, phone_number) 
                                     VALUES(@UserName, @Email, @Course, @Age, @PhoneNumber)";
                    using (SqlCommand commanddd = new SqlCommand(query, conobj))
                    {
                        // 为每个参数赋值
                        commanddd.Parameters.AddWithValue("@UserName", textBox1.Text);
                        commanddd.Parameters.AddWithValue("@Email", textBox2.Text);
                        commanddd.Parameters.AddWithValue("@Course", textBox3.Text);
                        // 如果age是数值类型,需转换类型,比如int.Parse(textBox4.Text),同时建议加输入验证
                        commanddd.Parameters.AddWithValue("@Age", textBox4.Text);
                        commanddd.Parameters.AddWithValue("@PhoneNumber", textBox5.Text);

                        commanddd.ExecuteNonQuery();
                        MessageBox.Show("DATA INSERTED SUCCESSFULLY");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error:" + ex.Message);
                }
            }
        }
    }
}

额外说明

  • using语句会自动释放数据库连接和命令对象,避免资源泄漏。
  • 如果age字段是数值类型(如int),需要将textBox4.Text转换为对应类型,同时建议添加输入验证,防止用户输入非数值内容。
  • 永远不要直接拼接用户输入到SQL语句中,参数化查询是最安全、可靠的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:43:18