【问题标题】:Incorrect syntax ASP.NETASP.NET 语法不正确
【发布时间】:2016-02-26 16:14:40
【问题描述】:

我是 ASP.net 的新手,并且一直在关注一些视频教程来构建登录页面。我成功地创建了我的注册页面,可以将详细信息输入到数据库中的表中,但是我无法让我的登录页面正常工作=/。我已经在这里工作了几个小时,不确定你们中是否有人可以提供帮助,但值得一试。我使用的 IDE 是 Visual Studio(最新版本)。

我收到以下错误(单击图像可以更仔细地查看,但您可能已经知道了):

错误会根据我尝试登录的人而变化,例如,尝试以 john 身份登录时返回了上述错误,尝试以管理员身份登录时返回了以下错误。

下面显示的是我在登录按钮后面使用的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration; 

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

}

protected void Button2_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
    conn.Open();
    string checkuser = "select count(*) from [Table] where [Login]'" + Loginbox.Text + "'";
    SqlCommand com = new SqlCommand(checkuser, conn);
    int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
    conn.Close();
    if (temp == 1)
    {
        conn.Open();
        string CheckPasswordQuery = "select Password from [Table] where [Login]='" + Loginbox.Text + "'";
        SqlCommand Passcom = new SqlCommand(CheckPasswordQuery, conn);
        string password = Passcom.ExecuteScalar().ToString().Replace(" ","");

        if (password == Passwordbox.Text)
        {
            Session["New"] = Passwordbox.Text; 
            Response.Write("Password is correct");


        }
        else
        {
            Response.Write("Wrong password");

        }
    }
    else {

        Response.Write("User name does not exist");


    }
    }


}

下面显示的是表单页面视图,它运行良好,按下登录按钮时返回错误。

下面是表格定义:

下面是表格中包含的数据:

感谢大家的宝贵时间,感谢大家为解决此问题提供的任何意见。

【问题讨论】:

  • 强制SQL Injection 警告。使用参数化查询(您也可能会看到错误)。
  • 只是可以确认其他人所说的话,这是验证登录的最不安全的方法之一 ;-) 看看这里youtube.com/watch?v=8ZtInClXe1Q
  • 哦,是的,我知道它非常不安全,很抱歉这是我的第一页,我只是想学习基础知识,它实际上不会用于任何承诺。如果是的话,你们可以利用它获得一些乐趣。
  • 那张贴与错误有什么关系:这不是 asp.net 问题 - 这是一个简单的 C# 错误,您可以删除它周围的所有废话并将其固定为几行纯 C# 和 SQL。

标签: c# sql asp.net visual-studio


【解决方案1】:

您的查询中有无效的语法。请注意,虽然许多教程可能会向您展示这样的查询,但它非常不安全。你应该使用参数。但是,为了这个答案,您忘记了等号:

string checkuser = "select count(*) from [Table] where [Login] = '" + Loginbox.Text + "'";

【讨论】:

  • 请展示如何使用 sql 参数化,因为其他人可能会参与其中并使用这种类型的注入。
  • 另一个答案现在已经表明了这一点,这是一个更安全的选择。
  • 天哪,我怎么会错过这个 :( 几个小时我一直盯着这个,很抱歉,但非常感谢你。是的,我认为这将是非常不安全的,我有很多东西要学,这是我的第一个登录页面,所以我真的不知道自己在做什么,这只是在试验我向你保证它不会被正确托管。
  • @ceefax12 与其盯着看,不如读一本关于基本调试技术的书。使用调试器(如在 Visual Studio 中)并逐步运行代码将帮助您找到该行。并查看您发送的 SQL。哦,阅读错误信息。复制/粘贴/凝视永远不会让你变得更好。你必须学会​​使用调试器。并学习如何隔离错误 - 你所有的帖子都是无关紧要的废话,它在 SQL 周围运行到 2-3 行。你应该能够看到 - 训练这个。
【解决方案2】:

您的语法不正确,但如果您将其参数化以避免sql注入,实际上更安全

string checkuser = "select count(*) from [Table] where [Login] = @user";
SqlCommand com = new SqlCommand(checkuser, conn);
com.Parameters.Add("@user", Loginbox.Text);
...

【讨论】:

  • 谢谢 :),完成后我会尝试以这种方式实现它,但我现在只是想获得一个工作页面 :) 我知道它非常不安全,但我不会不要用它做任何事情,别担心,这只是试验。
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2014-09-16
  • 2019-02-01
相关资源
最近更新 更多