C# WinForm执行SQL插入报Table附近语法错误 求协助解决
报错根因与修复方案
直接触发报错的原因
你的SQL语句中存在两个语法错误:
Table是SQL Server的内置保留关键字,直接作为表名使用会被识别为关键字而非表名,触发语法异常- 表名不能用单引号
'包裹,单引号在SQL中仅用于标识字符串值,引用特殊表名需要用方括号[]包裹
你原来的insert into 'Table'写法错误,临时修复可以改成insert into [Table],但更建议你将数据库里的表名改成有实际意义的名称,比如PatientInfo,避免后续再踩保留关键字的坑。
其他隐藏问题与完整修复方案
你当前的写法还有SQL注入漏洞、特殊字符输入报错、连接资源泄漏的风险,建议直接替换为参数化查询的写法,完整代码如下:
namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 连接字符串建议放到配置文件中,这里保留你的原有配置 private readonly string _conStr = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename=C:\Users\User\Documents\PatientDB.mdf;Integrated Security = True; Connect Timeout = 30"; private void label1_Click(object sender, EventArgs e) { Application.Exit(); } private void button1_Click(object sender, EventArgs e) { // using块会自动释放连接资源,不需要手动Close using (SqlConnection con = new SqlConnection(_conStr)) { con.Open(); // 如果表名已经改成PatientInfo就替换掉[Table] string sql = @"insert into [Table] values(@Fname, @Sname, @Age, @City, @Address, @Gender, @BloodType, @PhoneNum)"; SqlCommand cmd = new SqlCommand(sql, con); // 按字段实际类型添加参数,避免类型转换错误 cmd.Parameters.AddWithValue("@Fname", fname.Text); cmd.Parameters.AddWithValue("@Sname", sname.Text); cmd.Parameters.AddWithValue("@Age", int.Parse(age.Text)); // 这里可以额外加年龄合法性校验 cmd.Parameters.AddWithValue("@City", city.Text); cmd.Parameters.AddWithValue("@Address", address.Text); cmd.Parameters.AddWithValue("@Gender", gendercb.Text); cmd.Parameters.AddWithValue("@BloodType", btcb.Text); cmd.Parameters.AddWithValue("@PhoneNum", phonenum.Text); cmd.ExecuteNonQuery(); MessageBox.Show("Patient added successfully"); } } } }
内容的提问来源于stack exchange,提问作者Faisel Abdi
相关产品推荐
相关产品推荐

