【问题标题】:C# Oracle table issueC# Oracle 表问题
【发布时间】:2015-08-23 08:32:21
【问题描述】:

当我尝试登录用户时,我的 ASP.NET 应用程序出现问题。问题是,当我尝试运行查询时,会抛出一个异常,说明故事名称无效。因为这个表叫USER,是SQL的一部分。

我无法更改表名。

        public bool LoginUser(string username, string password)
    { 
        //Database Connectie maken
        DBConnectionOpen();

        string query = @"SELECT NICKNAME, PASSWORD FROM " + "'USER'" + "WHERE NICKNAME = '" + username + "'";
        bool result = false;

        try
        {
            OracleCommand command = new OracleCommand(query, conn);
            OracleDataReader reader = command.ExecuteReader();
            Console.WriteLine("*Query Uitvoeren*");
            reader.Read();

            if (username + password == reader.GetString(0) + reader.GetString(1))
            {
                result = true;
            }
        }

        catch (Exception ex)
        {
            throw ex;
        }

        finally
        {
            conn.Close();
        }

        return result;    


    }

【问题讨论】:

  • 如您所述,USER 是 SQL 的一部分,因此您不能将其用作表的名称。就像尝试用另一个保留字“STRING”命名您的表。它会失败的。你必须重命名你的表。 :(

标签: c# asp.net database oracle


【解决方案1】:

感谢大家的回复,但我终于想通了。

查询应该是什么:

        string query = @"SELECT NICKNAME, ""PASSWORD"" FROM ""USER"" WHERE NICKNAME = '" + username + "'";

【讨论】:

    【解决方案2】:

    将表命名为“USER”的人应该删除 db privs,但我认为您只需要在表名周围添加双引号:

    select * from "USER" where ...
    

    请注意,添加双引号时区分大小写,因此如果表名为 User,则需要“User”而不是“USER”

    【讨论】:

      【解决方案3】:

      尝试更正您的 SQL 语句,如下所示:

      string query = "SELECT NICKNAME, PASSWORD FROM [USER] WHERE NICKNAME = '" + username + "'";

      另外,如果您使用 SQL 保留字(例如 DATE)作为列名,则在您的 SQL 语句中将其括在尖括号中(例如 [DATE])。

      希望这会有所帮助。

      【讨论】:

      • 不幸的是,这不起作用,仍然是同样的错误。
      • 在我的回答中查看您的 SQL 字符串的更正版本。最好的问候,
      【解决方案4】:

      您正在查询字符串值“USER”。 你应该使用

      string query = @"SELECT NICKNAME, PASSWORD FROM [USER] WHERE NICKNAME = '" + username + "'";
      

      这将查询名为 USER 的表。在 SQL 中,如果您的意思可能模棱两可,通常您使用方括号表示您正在查询一个对象。

      表名作为字符串的连接是不必要的,所以我把它省略了。如果将其更改为变量,它会很有用。

      除了连接用户名之外,也许您还应该使用 Oracle 的替代方法,即 SQL Server 的 SqlParameter,以避免 SQL 注入。

      【讨论】:

      • 好的,谢谢,我去看看。稍后我会添加 sqlParameters。
      • 尝试在客户端数据库工具(如 Toad 或其他工具)中执行查询。通常使用 SQL Server,您应该在 SQL Server Management Studio 中尝试查询。
      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多