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

将DataGridView数据插入SQL Server数据库时遇SqlException语法错误求助

问题根源:SQL语句缺少闭合括号

你遇到的SqlException完全是因为INSERT语句的语法错误——看你写的SQL字符串:

INSERT INTO Tbl_Order(Name, Price, Quantity, Total) values(@Name, @Price, @Qty, @Total

注意到最后@Total后面少了一个闭合的)!数据库引擎解析到这里无法识别完整的语句,所以抛出了"Incorrect syntax near '@Total'"的错误。

修正后的代码&优化建议

除了补上括号,我还建议你用using块来管理数据库连接和命令对象,这样可以自动释放资源,避免手动关闭连接时可能出现的泄漏问题(比如代码抛出异常时con.Close()可能不会执行):

// 用using自动管理连接生命周期
using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-R34C6VV\\SQL;Initial Catalog=Student_Databse_2019_HW1;Integrated Security=True"))
{
    con.Open();
    // 把SqlCommand也放进using块,自动释放资源
    using (SqlCommand cmd = new SqlCommand("INSERT INTO Tbl_Order(Name, Price, Quantity, Total) VALUES(@Name, @Price, @Qty, @Total)", con))
    {
        // 提前定义参数,避免循环内重复创建
        cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50);
        cmd.Parameters.Add("@Price", SqlDbType.Int);
        cmd.Parameters.Add("@Qty", SqlDbType.Int);
        cmd.Parameters.Add("@Total", SqlDbType.Int);

        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {
            // 注意:要确保单元格值不是DBNull,避免类型转换错误
            var row = dataGridView1.Rows[i];
            cmd.Parameters["@Name"].Value = row.Cells[0].Value ?? DBNull.Value;
            cmd.Parameters["@Price"].Value = row.Cells[1].Value != null ? Convert.ToInt32(row.Cells[1].Value) : DBNull.Value;
            cmd.Parameters["@Qty"].Value = row.Cells[2].Value != null ? Convert.ToInt32(row.Cells[2].Value) : DBNull.Value;
            cmd.Parameters["@Total"].Value = row.Cells[3].Value != null ? Convert.ToInt32(row.Cells[3].Value) : DBNull.Value;

            cmd.ExecuteNonQuery();
        }
    }
}
dataGridView1.Rows.Clear();

额外提醒

  • 我把参数的定义移到了循环外面,这样不用每次循环都重新创建参数,效率更高
  • 增加了对DBNull的判断,避免DataGridView单元格为空时出现类型转换异常
  • 明确指定了参数的SqlDbType,比AddWithValue更安全(AddWithValue可能会因为自动推断类型导致性能或转换问题)

内容的提问来源于stack exchange,提问作者Mhamad Commander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:31