C# WinForm双条件查询数据报错:Incorrect syntax near ',' 求助
问题解决:SQL语法错误与安全优化
核心错误原因
你遇到的Incorrect syntax near ','错误,是因为SQL语句的WHERE子句中,两个查询条件之间用了逗号分隔——SQL里多条件查询必须用AND(或逻辑需要的OR)来连接条件,而不是逗号。
修正后的代码(含安全优化)
先修复语法问题,同时必须替换为参数化查询(直接拼接用户输入存在严重的SQL注入风险,还可能因日期格式、特殊字符引发其他错误):
private void DisplayDataGrid() { // 编写参数化SQL语句,避免拼接字符串 string sqlQuery = @"SELECT NamaStasiun, Tanggal, Hour00, Hour01, etc, Hour23 FROM [TableName] WHERE NamaStasiun LIKE @StationName AND Tanggal BETWEEN @StartDate AND @EndDate"; // 使用using确保资源正确释放 using (SqlCommand cmd = new SqlCommand(sqlQuery, connection)) { // 添加查询参数 cmd.Parameters.AddWithValue("@StationName", "%" + comboBoxNamaStasiun.Text + "%"); // 直接传递Date属性,避免字符串格式问题 cmd.Parameters.AddWithValue("@StartDate", DatePickerAwal.Value.Date); cmd.Parameters.AddWithValue("@EndDate", DatePickerAkhir.Value.Date); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); datagridshowdataexport.DataSource = dataTable; } }
重要说明
- 语法修复点:把原代码中
WHERE子句里的逗号替换为AND,让站点名和日期范围两个条件形成逻辑与的关系。 - 安全与可靠性优化:
- 参数化查询能彻底避免SQL注入攻击,这是直接拼接字符串的写法无法做到的。
- 直接传递
DateTime类型的Date属性,不需要转成字符串,数据库会自动处理日期格式,避免因系统区域设置不同导致的日期解析错误。
- 额外建议:使用
using语句包裹SqlCommand,确保数据库资源能被正确释放。
内容的提问来源于stack exchange,提问作者Iman Ahmadi Hardiyan
相关产品推荐
相关产品推荐

