繁体   English   中英

MS SQL无效的列名称错误

[英]MS SQL Invalid column name error

此代码返回以下错误:“ System.Data.SqlClient.SqlException(0x80131904):无效的列名称'a51'”

a51是我在Establishments表的EstablishmentCode列中查找的记录内的正确值。 帐户ID用于查找带有该帐户ID的场所表上的所有条目,并使用场所代码值填充数据集。 帐户ID值来自会话变量。 然后,我在循环中使用这些值中的每一个,其中每次迭代都在while循环中调用一个datareader。 希望我能清楚地解释这一点,但如果需要,我很乐意澄清更多。 这是我的代码。

myConnection.Open();
SqlCommand getEst = new SqlCommand("SELECT EstablishmentCode FROM Establishments WHERE AccountID = " + ID, myConnection);
            da = new SqlDataAdapter(getEst);
            ds = new DataSet();
            da.Fill(ds);
            int maxrows = ds.Tables[0].Rows.Count;
            for (int x = 0; x < maxrows; x++)
            {
                getPhones = new SqlCommand("SELECT * FROM DispatcherPhones WHERE EstablishmentCode = " + ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString(), myConnection);
                myReader = getPhones.ExecuteReader();
                while (myReader.Read())
                {
                    Response.Write("<section id='phone" + myReader["Phone"].ToString() + "' style='padding:20px'>");
                    Response.Write("<section>Phone Number<br><div class='phone'>" + myReader["Phone"].ToString() + "</div></section>");
                    Response.Write("<section>Location Code<br><div class='name'>" + myReader["EstablishmentCode"].ToString() + "</div></section>");
                    Response.Write("<section>Active<br><div class='name'>" + myReader["Active"].ToString() + "</div></section>");
                    Response.Write("<section class='flex phoneButtonSection'>");
                    Response.Write("<button type=\"button\" onclick=\"showPhoneForm('" + myReader["ID"].ToString() + "');\">CHANGE</button>");
                    Response.Write("<button type=\"button\" onclick=\"deletePhones('" + myReader["ID"].ToString() + "');\">DELETE</button>");
                    Response.Write("</section>");
                    Response.Write("</section>");
                }
                myReader.Close();
            }

            myReader.Close();
            myConnection.Close();

在SQL字符串文本是用单引号(标记为' S),其缺少了你的价值:

getPhones = new SqlCommand
    ("SELECT * " +
     "FROM DispatcherPhones 
     "WHERE EstablishmentCode = '" + 
     // Here -------------------^ 
     ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString() +
     "'" // And here
     , myConnection);

强制性注释:为了创建SQL语句而添加字符串可能会使您的代码容易受到SQL注入攻击。 您应该考虑改为使用准备好的语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM