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

查询语句提示语法错误但自认正确,附C#检查记录存在方法代码

排查SQL语法错误及代码修正建议

嘿,我帮你看看这个问题,你的代码里有几个明显的语法问题导致了SQL错误,咱们一个个来解决:

1. SQL语句拼接的语法错误

首先看你拼接SQL的这行代码:

string query = "SELECT * FROM " + tableName + " WHERE " + column " = @" + column;

在column变量和后面的" = @"字符串之间缺少了一个加号(+),这会直接导致字符串拼接失败,生成的SQL自然存在语法错误。

修正后的SQL拼接代码应该是:

string query = "SELECT * FROM " + tableName + " WHERE " + column + " = @" + column;

2. MySqlCommand对象创建的语法错误

你创建命令对象的代码也有问题:

MySqlCommand = new MySqlCommand(query, conn);

这里没有声明变量名,正确的写法需要指定一个变量来接收命令对象,比如:

MySqlCommand cmd = new MySqlCommand(query, conn);

另外,你还需要给参数绑定值,不然SQL执行时会因为缺少参数值报错,比如添加:

cmd.Parameters.AddWithValue($"@{column}", id);

3. 额外建议:修复资源泄漏与避免SQL注入

除了语法问题,你的代码还有两个需要优化的点:

  • 使用using语句包裹数据库连接、命令和阅读器对象,确保资源自动释放,避免连接泄漏。
  • 直接拼接tableName和column到SQL语句存在严重的SQL注入风险,建议先对表名和列名做白名单校验,只允许合法的表/列名传入。

完整修正后的代码示例

public bool CheckRecordExist(int id, string tableName, string column) 
{
    // 白名单校验:替换成你实际允许的表名和列名
    var allowedTables = new List<string> { "Users", "Orders" };
    var allowedColumns = new List<string> { "Id", "UserId", "OrderId" };
    
    if (!allowedTables.Contains(tableName) || !allowedColumns.Contains(column))
    {
        throw new ArgumentException("非法的表名或列名");
    }

    string connection = string.Format("Server=localhost; database={0}; UID=root; password=root; SslMode=none; CharSet=utf8;", "myDb");
    
    // 使用using自动释放资源
    using (MySqlConnection conn = new MySqlConnection(connection))
    {
        string query = "SELECT * FROM " + tableName + " WHERE " + column + " = @" + column;
        
        using (MySqlCommand cmd = new MySqlCommand(query, conn))
        {
            cmd.Parameters.AddWithValue($"@{column}", id);
            conn.Open();
            
            // 只需判断是否存在行,不需要读取所有数据
            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                return reader.HasRows;
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:51