我想在网格视图中搜索我使用此代码:
protected void search_Click(object sender, EventArgs e)
{
string qu = "SELECT * FROM [USERS] WHERE (([kind] = @kind) or ([family] LIKE '%' + @family + '%') or ([name] LIKE '%' + @name + '%') or ([username] LIKE '%' + @username + '%') or ([tarikhozviyat] < @tarikhozviyat) or ([tarikhozviyat] > @tarikhozviyat2))";
SqlCommand cmd = new SqlCommand(qu, con);
cmd.Parameters.AddWithValue("@name", nametxt.Text);
cmd.Parameters.AddWithValue("@family", familytxt.Text);
cmd.Parameters.AddWithValue("@kind", kind.Text);
cmd.Parameters.AddWithValue("@username", usernametxt.Text);
cmd.Parameters.AddWithValue("@tarikhozviyat", sdatetxt.Text);
cmd.Parameters.AddWithValue("@tarikhozviyat2", edatetxt.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
ShowData();
}
如果我只填写几个文本框而不是所有文本框,它会要求我填写所有文本框以运行搜索
答案 0 :(得分:1)
替换此行:
.change {
display:inline-block;
}
使用
#timeChanges {
display:inline-flex;
//display: flex;
}
它将搜索任何参数组合,其中一些参数可能为空,查询将禁止它们。
我希望对你有所帮助:)。
答案 1 :(得分:0)
你在查询和参数上显得很好......你可以用多种方式之一做...我建议只添加where子句和参数IF它存在。
string qu = "SELECT * FROM [USERS] WHERE ";
string orClause = "";
if( !string.IsNullOrWhiteSpace( nametxt.Text ))
{
qu += orClause + "[name] LIKE @parmName ";
cmd.Parameters.AddWithValue("parmName", "%" + nametxt.Text.Trim() + "%");
orClause = " or ";
}
if( !string.IsNullOrWhiteSpace( kind.Text ))
{
qu += orClause + "[kind] = @parmKind ";
cmd.Parameters.AddWithValue("parmKind", kind.Text.Trim());
orClause = " or ";
}
etc... with rest of your criteria.
If no criteria, you can just add where 1=1...
if( string.IsNullOrWhiteSpace( orClause ))
qu += " 1=1 ";
反馈...
你声明它不起作用......什么部分没有...逻辑是准确的,因为你的所有原始查询帖子都是&#34; OR&#34;一起。如果用户没有填写字段的特定值,则无论如何都会排除该条件。如果你打算&#34; AND&#34;标准,只是改变或者和。实施例...
如果你想要&#34; KIND&#34;并且NAME是&#34;无论&#34;和......
它应该像我在我的一些查询中那样定期工作,而不是所有标准都是必需的。
不确定你对填充Nametxt等的意思,但它可能是关于使用&#34; @&#34;的MySQL的混淆作为变量,你有相同的&#34;名称&#34;作为&#34; @ name&#34;例如。我通常采取的措施是防止这种混淆,为预期的参数添加一个前缀,例如&#34; parmName&#34;,&#34; parmKind&#34;,&#34; parm ...&#34;此外,在定义参数时,请勿使用&#34; @&#34;作为字符串。请参阅上面的修订版。