Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C Oracle表问题_C#_Asp.net_Database_Oracle - Fatal编程技术网

C# C Oracle表问题

C# C Oracle表问题,c#,asp.net,database,oracle,C#,Asp.net,Database,Oracle,当我尝试登录用户时,我的ASP.NET应用程序出现问题。问题是,当我试图运行查询时,会抛出一个异常,表示名称无效。这是因为表名为USER,这是SQL的一部分 我无法更改表名 public bool LoginUser(string username, string password) { //Database Connectie maken DBConnectionOpen(); string query = @"SEL

当我尝试登录用户时,我的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;    


    }

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

字符串查询=从[USER]中选择昵称和密码,其中昵称='+username+'

此外,如果您使用SQL保留字(例如日期)作为列名,则在SQL语句中将其括在角括号中,如[DATE]


希望这会有所帮助。

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

string query = @"SELECT NICKNAME, PASSWORD FROM [USER] WHERE NICKNAME = '" + username + "'";
这将查询名为USER的表。在SQL中,如果您的意思可能不明确,则通常使用括号表示您正在查询对象

将表名串联为字符串是不必要的,所以我省略了它。如果您将其更改为一个变量,它将非常有用


此外,为了避免SQL注入,您可能还应该使用Oracle的替代方案,即SQL Server的SqlParameter,而不是串联用户名。

无论谁命名表用户,都应该删除db privs,但我认为您只需要在表名周围添加双引号:

select * from "USER" where ...

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

感谢所有的响应,但我最终找到了答案

查询应该是什么:

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

正如您所指出的,USER是SQL的一部分,因此不能将其用作表名。将尝试使用另一个保留字字符串命名表。它会失败的。您必须重命名您的表:不幸的是,这不起作用,仍然是相同的错误。请在我的答案中查看SQL字符串的更正版本。致以最良好的祝愿,好的,谢谢,我会查一查的。稍后我将添加sqlParameters。尝试在客户机数据库工具中执行查询,如Toad或其他。通常,对于SQL Server,您应该在SQL Server Management Studio中尝试查询。