使用C#向数据库插入数据时出现语法错误,寻求解决方法
问题排查与修复
核心错误点
- SQL语法格式错误:INSERT语句的列名写法有误,你给每个列单独套了括号,正确格式是把所有列名放在同一个括号内,用逗号分隔。
- VALUES值拼接错误:你把所有文本框内容直接拼接成了一个字符串,没有为每个字段单独添加引号和分隔符,导致SQL解析时触发语法错误。
- 严重安全隐患:直接拼接用户输入会引发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
相关产品推荐
相关产品推荐

