这是我第一次从头开始创建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时,我弹出“无效列名称”的异常,是否有明显的原因说明为什么我失踪了?任何建议将不胜感激
答案 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: