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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:05:14