asp.net '无法绑定多部分标识符“abc@gmail.com”。'

Posted

技术标签:

【中文标题】asp.net \'无法绑定多部分标识符“abc@gmail.com”。\'【英文标题】:asp.net 'The multi-part identifier "abc@gmail.com" could not be bound.'asp.net '无法绑定多部分标识符“abc@gmail.com”。' 【发布时间】:2018-10-04 16:55:07 【问题描述】:

我编写了一些代码来访问 id 表单表 dbo.details,方法是使用存储在会话中的用户电子邮件 ID,但我收到此错误

无法绑定多部分标识符“abc@gmail.com”

我用过Visual Studio 2017的内置服务器。

这是我的代码:

protected void Page_Load(object sender, EventArgs e)

        if (Session["user"] == null)
        
            Response.Write("<script>alert('you have to login to Checkout!')</script>");
            Response.Redirect("login.aspx");
        
        else
        
            string S1 = Convert.ToString(Session["user"].ToString());

            SqlConnection scon = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            String myquery = "select ID from dbo.details where email=" + S1;

            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = myquery;
            cmd.Connection = scon;

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataSet ds = new DataSet();
            da.Fill(ds);

            int details_id = Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());
            Response.Write(details_id);
        

我已经检查了所有的名字,它们都没有问题。

我现在不知道该怎么办!

【问题讨论】:

不要使用容易注入 SQL 的代码,问题会“自行解决”。搜索“C# SQL 参数”并相应地更新代码。 在构建字符串时,需要将电子邮件用单引号引起来。但即使这仍然不是一个好主意,您应该使用参数化查询。 在***.com/q/7505808/2864740 中提供了有关为什么会发生这种情况(以及如何避免)的详细信息 SOL 参数运行良好。 @MuratCanOĞUZHAN 确信你可以采用这种方法,但不帮助别人解决这样一个重大问题只会延续这种真正可怕的编码风格。 【参考方案1】:

使用字符串引号

 String SQL = string.Format("select ID from dbo.details where email='0'", S1 );

【讨论】:

【参考方案2】:

错误的根本原因是这一行-

String myquery = "select ID from dbo.details where email=" + S1;

它将查询构建为

select ID from dbo.details where email=abc@gmail.com;

现在,如果您运行此查询,您将收到异常,因为电子邮件被假定为用单引号括起来的字符串。因此,更改您的 myQuery 以在电子邮件周围添加单引号,如下所示。

String myquery = "select ID from dbo.details where email='" + S1 + "'";

但是,始终建议使用 parameterised queries. 以避免 SQL 注入。

【讨论】:

如果您演示如何使用参数而不是演示最糟糕的 sql 编写方式,那将是一个更好的答案。 ***.com/questions/7505808 和 ***.com/questions/5468425 都与问题有关.. 想知道为什么答案会被否决,我解释了为什么 OP 会出现异常,并提供了解决问题的选项,包括通过共享链接推荐的方法,该链接很好地解释了使用参数化查询。 这不是我的反对意见,但如果你添加了 2-3 行代码来演示参数,那将是值得赞成的。

以上是关于asp.net '无法绑定多部分标识符“abc@gmail.com”。'的主要内容,如果未能解决你的问题,请参考以下文章

协助 SQL 查询 - 无法绑定多部分标识符

无法绑定多部分标识符“alias.field”

多部分标识符无法绑定更新列

SQL 错误:无法绑定多部分标识符

无法绑定多部分标识符“p.ProductID”

无法绑定多部分标识符 - 子查询