【问题标题】:Incorrect syntax near the keyword 'Select'. how to resolve in this code关键字“选择”附近的语法不正确。如何在此代码中解决
【发布时间】:2019-03-08 06:58:30
【问题描述】:

此代码在下面标记的行上引发错误,谁能指出正确的方向,为什么会引发错误?

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
    SqlDataAdapter dadapter;
    DataSet dset; 
    string sql = "SELECT * from  SocoetyMaintan";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dadapter = new SqlDataAdapter(sql, con);
            dset = new DataSet();
            dadapter.Fill(dset);
            DropDownList1.DataSource = dset.Tables[0];
            DropDownList1.DataTextField = "FullName";
            DropDownList1.DataValueField = "Id";
            DropDownList1.DataBind();
            GridViewBind();
        }
    }
      protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewBind();
        }
        public void GridViewBind()
        {
            dadapter = new SqlDataAdapter("SELECT * from SocoetyMaintan where Id=" + DropDownList1.SelectedValue + "", con);
            dset = new DataSet(); //Throwing Error Here
            dadapter.Fill(dset);
            GridView1.DataSource = dset.Tables[0];
            GridView1.DataBind();

【问题讨论】:

  • 使用准备好的语句。你表中Id 列的类型是什么,你想绑定什么C#类型?
  • 当你说错误时——你的意思是编译时错误吗?
  • 错误只是表示Select语句格式不正确,无法解析,为什么你不能弄清楚生成的Select语句以及它是否会作为普通sql运行,这就是整个问题
  • 试试这个 => dadapter = new SqlDataAdapter("SELECT * from SocoetyMaintan where Id='" + DropDownList1.SelectedValue + "'", con);
  • 您是否在代码中的任何位置打开了 SQL 连接?

标签: sql asp.net ado.net


【解决方案1】:

在这里,您忘记将 DropDownList1.SelectedValue 转换为字符串或 int 数据库中的任何内容。所以按照以下方式进行。 例如,

dadapter = new SqlDataAdapter("select * from SocoetyMaintan where Id='" + DropDownList1.SelectedValue.ToString() + "';", con);

【讨论】:

  • DropDownList1.SelectedValue 的类型为字符串仅供参考
  • 我不明白你所说的“仅供参考”。请再说一遍。
  • 好的。知道了。 ';'查询中缺少。
  • @ksdev nope ; 对于单个查询不是必需的,在这里不会有任何影响。
  • @AshkanMobayenKhiabani 是的。我接受这一点,但使用它是一种很好的做法。它会在编写多个查询时生效。
【解决方案2】:

它认为您在 Id= 中缺少引号。

 $"SELECT * from SocoetyMaintan where Id='{DropDownList1.SelectedValue}';"

顺便说一句。您不应该允许用户直接输入到您的查询中。查找“SQL 注入”。

【讨论】:

    【解决方案3】:

    您的写作方式可能会出错。试试下面的

    方法一:

    SqlDataAdapter dadapter = new SqlDataAdapter(string.Format("SELECT * FROM SocoetyMaintan WHERE Id = '{0}'",DropDownList1.SelectedValue), con);
    

    方法二:(首选)

    using (SqlDataAdapter dadapter = new SqlDataAdapter("SELECT * FROM SocoetyMaintan WHERE Id = @id", con))
    {
        int filter = ID;
        dadapter.SelectCommand.Parameters.AddWithValue("@id", DropDownList1.SelectedValue);
    }
    

    【讨论】:

    • 您听说过 Little Bobby Tables 吗? xkcd.com/327人们应该为方法1受到惩罚。:)
    • 如果 DropDownList1.SelectedValue 等于 "1';Drop table SocoetyMaintan;'1'='1" 会发生什么
    【解决方案4】:

    1) 只需尝试如下更改您的查询

    dadapter = new SqlDataAdapter("SELECT * from SocoetyMaintan where Id='" + DropDownList1.SelectedValue + "'", con);
    

    注意:最好在查询中使用准备好的语句。

    dadapter = new SqlDataAdapter("SELECT * from SocoetyMaintan where Id=@Id", con);
    dadapter.SelectCommand.Parameters.AddWithValue("@Id", DropDownList1.SelectedValue);
    

    2) 尝试设置您的 asp:GridView => DataSourceID="GridDataSource"asp:SqlDataSource => ID="GridDataSource"

    【讨论】:

    • @Poojakulkarni,查看答案可能对您有帮助:)
    • 您好,先生,需要更多帮助,在上面的代码中,我想为 GridViewBind() 添加 iff 语句,在其他情况下,我想说“没有要显示的数据”,所以如何编写这样的if 语句条件? @ershoiab
    猜你喜欢
    • 2016-06-08
    • 2013-12-16
    • 2017-11-22
    • 2018-06-16
    • 2013-10-29
    • 2014-06-22
    • 1970-01-01
    • 2013-05-04
    • 2013-05-21
    相关资源
    最近更新 更多