无效的列名称asp

时间:2018-07-17 09:22:32

标签: c# sql asp.net asp.net-web-api sqlcommand

这是我第一次从头开始创建Web api,我试图在下拉弓中获取选定的值以触发sql搜索并使相应的项目出现在文本框中。下面是相关代码

protected void btnRetrieve_Click(object sender, EventArgs e)
    {
        try
        {

            string pNameTemp = DropDownList1.SelectedValue;

            myConnection.Open();
            string query = ("SELECT sName from [dbo].[Table] WHERE (pName LIKE " + pNameTemp + ")");
            SqlCommand sqlCmd = new SqlCommand(query, myConnection);                
            txtSkill.Text = sqlCmd.ExecuteScalar().ToString();
            myConnection.Close();
        }

    catch(Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

它似乎搜索正确的名称,但是当涉及到更新txtSkill时,我弹出“无效列名称”的异常,是否有明显的原因说明为什么我失踪了?任何建议将不胜感激

1 个答案:

答案 0 :(得分:2)

实际上,您缺少查询参数的''

尝试使用此查询。

SqlCommand sqlCmd = new SqlCommand(@"SELECT sName from [dbo].[Table] WHERE pName LIKE '{pNameTemp}'", myConnection);    

但是我建议您在C#中使用SqlParameter来避免SQL Injection

SqlCommand com = new SqlCommand("SELECT sName from [dbo].[Table] WHERE pName LIKE @field", myConnection);
myConnection.Parameters.AddWithValue("@field", pNameTemp);

但是通常,当我们使用LIKE时,我们应该放入%,因为它给出的所有结果都包含keyword。没有LIKE的{​​{1}}没有任何意义。因此:

%

SqlCommand com = new SqlCommand("SELECT sName from [dbo].[Table] WHERE pName LIKE @field", myConnection); command.Parameters.AddWithValue("@field", "'%" + pNameTemp + "%'"); 子句中有some options

  • %:百分号代表零个,一个或多个字符
  • _下划线表示单个字符