C# C Oracle表问题
当我尝试登录用户时,我的ASP.NET应用程序出现问题。问题是,当我试图运行查询时,会抛出一个异常,表示名称无效。这是因为表名为USER,这是SQL的一部分 我无法更改表名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
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中尝试查询。