使用DevExpress GridLookUpEdit插入数据时SQL语法错误求助
问题分析与解决方案
错误根源
出现Incorrect syntax near '2'错误的核心原因有两个:
- SQL字符串拼接引发语法错误:直接拼接变量生成SQL语句时,若
idUNIT的值格式不符合要求(比如字符串类型未加引号、值包含特殊字符),会触发SQL语法错误。 - GridLookUpEdit的ValueMember配置不匹配:数据库查询的字段是
idunit(全小写),但代码中设置ValueMember = "idUnit"(大小写混合),DataTable列名区分大小写,这会导致无法正确获取选中项的ID值,进而拼接出错误的SQL语句。
解决步骤
1. 修正GridLookUpEdit的ValueMember配置
将ValueMember改为与数据库查询字段一致的小写:
//fill area var data_area = SQLHelper.ExecQueryDataAsDataTable("select idunit, Area from pi_unit"); cbara.Properties.DataSource = data_area; cbara.Properties.ValueMember = "idunit"; // 与数据库字段名称保持一致 cbara.Properties.DisplayMember = "Area";
2. 使用参数化查询替代字符串拼接
参数化查询能彻底避免语法错误,同时杜绝SQL注入风险,修改插入代码如下:
string query = "insert into Pi_Line_No(idUNIT,Line,Line_Size,Circuit,Serial,Pipe_Class) values(@idUNIT, @Line, @Line_Size, @Circuit, @Serial, @Pipe_Class)"; using (SqlConnection connection = new SqlConnection("/* connection info */")) { using (SqlCommand command = new SqlCommand(query, connection)) { // 绑定参数,自动处理数据类型和格式 command.Parameters.AddWithValue("@idUNIT", cbara.EditValue ?? DBNull.Value); command.Parameters.AddWithValue("@Line", Line ?? DBNull.Value); command.Parameters.AddWithValue("@Line_Size", Size ?? DBNull.Value); command.Parameters.AddWithValue("@Circuit", Circuit ?? DBNull.Value); command.Parameters.AddWithValue("@Serial", Serial ?? DBNull.Value); command.Parameters.AddWithValue("@Pipe_Class", PipeClass ?? DBNull.Value); connection.Open(); command.ExecuteNonQuery(); } }
3. 增加前置校验(可选)
保存前检查GridLookUpEdit是否已选中有效项,避免空值插入:
if (cbara.EditValue == null || cbara.EditValue == DBNull.Value) { MessageBox.Show("请选择区域"); return; }
内容的提问来源于stack exchange,提问作者sajad saeedi azad
相关产品推荐
相关产品推荐

