【问题标题】:Incorrect syntax near the keyword 'Table' error [duplicate]关键字“表”错误附近的语法不正确[重复]
【发布时间】:2013-03-10 18:38:31
【问题描述】:

我已经搜索过这个错误,我想出了这个:

“我应该用单引号将我的代码中的用户名和密码括起来”......我做了,但代码仍然显示相同的确切错误!

这是我修复后的代码:

String strng = " SELECT * FROM Table "
        + " WHERE Username = '" + txtUsername.Text + "' AND " 
        + " Password = '" + txtPassword.Text + "'";

【问题讨论】:

  • 为了上帝的爱,使用参数化查询!
  • Table 必须是 [Table]。使用参数化查询(以及更具描述性的表名。例如User
  • 您要查询的表的名称是什么?它实际上是 Table 吗?
  • 这看起来应该可以正常运行。您实际上并没有使用 Table 作为表的名称,是吗?如果您仍然遇到问题,请打开 SSMS 并玩弄您的查询以使其自行工作。

标签: c# asp.net sql sql-server


【解决方案1】:

假设Table 是您的表的真实名称,试试这个

String strng = " SELECT * FROM [Table] "
    + " WHERE Username = '" + txtUsername.Text + "' AND " 
    + " Password = '" + txtPassword.Text + "'";

注意Table 周围的[],这是为了转义,因为Table 是保留字。

我同意现有 cmets 的观点,即这不是构建 sql 查询的正确方法。您面临SQL Injection 攻击,并且从可读性的角度来看也更糟。您应该改用参数。

String strng = @" 
    SELECT * FROM [Table]
    WHERE Username = @UserName AND
    Password = @Password";
...
command.Parameters.AddWithValue("@UserName", txtUsername.Text);
command.Parameters.AddWithValue("@Password", txtPassword.Text);

还有两件事你必须考虑:

  • 转义用户输入以避免XSS attack
  • 在数据库中存储加密密码而不是纯文本

【讨论】:

  • 或者他可以使用存储过程并使用 Exec spName 在 c# 中访问它。
猜你喜欢
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2013-12-16
相关资源
最近更新 更多