2017-01-21 59 views
-4

我想创建一个登录页面,但但我的登录按钮不起作用。我从我的sql服务器数据库中选择用户名和密码。登录屏幕使用asp.net和SQL Server

不幸的是,我得到一个错误

System.Data.SqlClient.SqlException:附近有语法错误'

第27行:下面

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 

代码:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ConnectionString); 
con.Open(); 

string checkuser = "select * from tb_Login where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' "; 

SqlCommand com = new SqlCommand(checkuser, con); 

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 
con.Close(); 

if (temp == 1) 
{ 
    con.Open(); 
    string checkPass = "select Password from tb_Login where Username='" + txtUsername.Text + "'"; 

    SqlCommand passCom = new SqlCommand(checkPass, con); 
    string password = passCom.ExecuteScalar().ToString().Replace(" ", ""); 

    if (password == txtPassword.Text) 
    { 
     Session["New"] = txtUsername.Text; 
     Response.Write("Correct"); 
    } 
    else 
    { 
     Response.Write("Not Correct"); 
    } 
} 
else 
{ 
    Response.Write("Username not correct"); 
} 
+2

您在用户名后面缺少'=',应使用参数化查询。任何人都可以通过SQL注入登录或更糟。密码也不应以纯文本形式存储。 –

+0

访问您的应用程序的通用密码是:''OR 1 == 1; - ' – David

+0

而且密码显然是以纯文本格式存储的。 – TTT

回答

0

这行代码:

string checkuser = "select * from tb_Login where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' "; 

是发送查询到数据库,并问:“给我所有的tb_Login其用户名在txtUsername框中的值和密码在txtPassword框中列。 “

那么这条线将在第一行的第一列的值,并尝试将其转换为整数,如果它不能将失败:

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 

更改您的查询来选择一个栏只:你需要的栏目。

此外,请确保您阅读this关于stackoverflow的问题,以便您可以看到您的代码是如何对自己的应用程序的安全威胁。

+0

感谢您的帮助。我只是不理解如何更改此查询:int temp = Convert.ToInt32(com.ExecuteScalar()。ToString()); –

+0

没有那条线是好的。你需要改变你的sql查询,因为它使用'select *',所以它会得到很多列。你需要获得你需要的列。我不知道该列的名称,但如果它是'Column1',然后写'从tb_Login中选择Column1,其中Username =' – CodingYoshi

+0

感谢您的帮助。我非常感谢你和你的时间 –