c# - 查询语法错误但查询正确
问题描述
我写了一个通用方法来搜索特定表中是否存在值,方法非常简单:
public bool CheckRecordExist(int id, string tableName, string column)
{
string connection = string.Format("Server=localhost; database={0}; UID=root; password=root; SslMode=none; CharSet=utf8;", "myDb");
MySqlConnection conn = new MySqlConnection(connection);
string query = "SELECT * FROM " + tableName + " WHERE " + column " = @" + column;
MySqlCommand = new MySqlCommand(query, conn);
MySqlCommand.Parameters.AddWithValue("@" + column, id);
return Convert.ToBoolean(MySqlCommand.ExecuteScalar());
}
假设我想检查2538782
表匹配中是否存在具有 id 的记录,我这样做:
CheckRecordExist(2538782, "match", "id");
所以query
变量将是:
SELECT * FROM match WHERE id = @id
如果我在 中运行它PhpMyAdmin
,用值替换id
,我会得到正确的响应,但在我的应用程序中,我会得到:
MySql.Data.MySqlClient.MySqlException: '你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“match WHERE id = 2538782”附近使用正确的语法
怎么了?
解决方案
见https://dev.mysql.com/doc/refman/5.7/en/keywords.html
MATCH
是 MySQL 中的保留关键字。
只有将保留字括在分隔符中时,才能使用它们作为标识符。MySQL 标识符的默认分隔符是反引号。
推荐阅读
- javascript - 如何动态地将条件格式应用于数据透视表
- c# - 从 arrayList 在 c# 中创建 html 按钮
- python - 如何在谷歌云运行上优化请求延迟Python Tornado 服务
- visual-studio-code - Visual Studio Code:c++ for 循环在完成之前停止
- html - 将文本 html 转换为 svg 文本
- ruby-on-rails - Rails 应用程序如何设置它的环境(Dev.、Staging 等)?
- android - AS3 为什么音效在 Android 上不起作用?
- react-admin - 如何做出改变某些东西然后在 react-admin 中打开另一个屏幕的操作?
- laravel - 如何结合 Laravel Blade 指令来检查表单输入字段
- javascript - 使用 Javascript 导出/导入动态更改的表信息