我正在尝试从我的数据库中检索视频名称,其中视频的主题就像我要搜索的主题。
我尝试了类似的查询,但它不是返回值。
你能否提出建议。
我正在使用c#与sql server。
这是我的代码。
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
string s1 = textBox1.Text;
cmd = new SqlCommand("select Video_Name,subject from Videos where subject like '%"+ s1 +" % ' " ,con);
//cmd = new SqlCommand("select Video_Name from Videos where subject='"+ s1+"' ", con);
SqlDataReader dr = cmd.ExecuteReader();
ArrayList a = new ArrayList();
label2.Visible = true;
label3.Visible = true;
//if (dr.Read())
{
while (dr.Read())
{
a.Add(dr[0].ToString());
}
foreach (string n in a)
{
comboBox1.Items.Add(n);
}
MessageBox.Show("Search succeded");
}
答案 0 :(得分:10)
使用参数化查询
string s1 = textBox1.Text;
cmd = new SqlCommand("select Video_Name,subject from Videos where subject like @video",con);
cmd.Parameters.AddWithValue("@video", "%" + s1 + "%");
这样可以避免Sql Injection问题,并且您的命令文本更具可读性 这也有助于格式化命令文本而不会出现细微的输入错误,也无需在字符串周围添加引号。使用参数,正确引用参数值的负担将传递给更好地了解如何正确执行的框架代码。
顺便说一下,你可以避免第二个循环将combobox.Datasource属性设置为ArrayList变量a
comboBox1.Datasource = a;
答案 1 :(得分:2)
也许是因为你在最后一个%和它的'
后面有一个空格"select Video_Name,subject from Videos where subject like '%"+ s1 +">> % ' "<<
尝试这样的事情
"select Video_Name,subject from Videos where subject like '%"+s1+"%'"
答案 2 :(得分:0)
cmd = new SqlCommand("select Video_Name,subject from Videos where subject like @vdnam",con);
cmd.Parameters.AddWithValue("@vdnam", "%" + VdName + "%");
if (dr.HasRows)
{
while (dr.Read())
{
a.Add(dr[0].ToString());
}
comboBox1.Datasource= a.List();
MessageBox.Show("Search succeded");
}
答案 3 :(得分:0)
Steve's answer当然是对的。
主要问题在于,您的查询参数在单引号内。在引号中,SQL会将其识别为string literal,而从不将其视为参数。