空文本框上的错误

时间:2017-08-18 20:28:56

标签: c# asp.net textbox

我想在网格视图中搜索我使用此代码:

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();
}

如果我只填写几个文本框而不是所有文本框,它会要求我填写所有文本框以运行搜索

2 个答案:

答案 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;作为字符串。请参阅上面的修订版。