C# WinForm SQL语法错误:向[Product Name]列插入数据失败
问题解决:SQL语法错误及代码修正
错误原因分析
- SQL语句语法错误:
INSERT INTO的表名引用格式错误,正确的架构+表名写法是数据库名.架构名.表名,带空格的表名必须用方括号包裹,你的语句里dbo后缺少点号,应改为fiyat.dbo.[Urun Ismi]。 - 参数名不匹配:SQL语句中定义的参数是
@EklenecekVeri,但代码里添加的参数是@DataToAdd,两者必须完全一致。 - 连接对象混用:代码创建了
con连接对象,但SqlCommand却使用了未定义的baglanti,导致连接不匹配;同时未用using包裹连接,容易引发连接泄漏。 - MessageBox参数顺序错误:
MessageBox.Show的第二个参数是窗口标题,第三个才是显示内容,你写反了顺序。 - SqlDataReader无需使用:你的需求是插入数据,
SqlDataReader是用来读取查询结果的,和当前操作完全无关,不用理会这个建议。
修正后的完整代码
private void button2_Click(object sender, EventArgs e) { string datatoadd = textBox1.Text; try { // 用using包裹连接,自动释放资源,无需手动Close using (SqlConnection con = new SqlConnection(conString)) { con.Open(); // 修正SQL表名格式,统一参数名 string query = "INSERT INTO fiyat.dbo.[Urun Ismi] VALUES (@EklenecekVeri)"; using (SqlCommand komut = new SqlCommand(query, con)) { // 参数名与SQL语句中保持一致 komut.Parameters.AddWithValue("@EklenecekVeri", datatoadd); komut.ExecuteNonQuery(); } } // 修正MessageBox参数顺序 MessageBox.Show($"Data added successfully, added data: {datatoadd}", "Success"); } catch (Exception ex) { MessageBox.Show($"Error: {ex.Message}", "Error"); } }
额外优化建议
- 尽量避免使用带空格的表名/列名,后续开发可用下划线替代(比如
Urun_Ismi),减少语法错误概率。 - 优先使用
Parameters.Add而非AddWithValue,AddWithValue可能导致类型推断问题,示例:komut.Parameters.Add("@EklenecekVeri", SqlDbType.NVarChar).Value = datatoadd;(根据你的列类型调整SqlDbType)。
内容的提问来源于stack exchange,提问作者poizdev
相关产品推荐
相关产品推荐

