2017-08-18 1 views
0

ich auf Kurzansicht suchen möchten verwende ich diesen Code:Fehler auf leere 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(); 
} 

, wenn ich nur mehrere Textfelder füllen, aber nicht alle von ihnen es mir bitte alle zu füllen Suche auszuführen

+1

Also, wenn ich von Ihrer Frage verstehe, möchten Sie Code hinzufügen, um alle zu füllen? –

+0

jemand möchte nur auf den Benutzernamen suchen, jemand will Suche nach Namen und Familie und ... so müssen sie Benutzername Textfeld oder Name und Familie Textfelder nicht alle Textfelder füllen, aber es fragt mich, alle zu füllen, und ich möchte nicht füllen alle – mrym

Antwort

0

Sie scheinen in der Abfrage und den Parametern meist ok zu sein ... Sie könnten es auf mehrere Arten tun ... Ich würde vorschlagen, nur where-Klausel und Parameter hinzuzufügen, wenn es existiert.

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 "; 

FEEDBACK ...

Sie sagen es nicht ... funktioniert, welcher Teil nicht funktioniert ... die Logik genau wie alle Ihre ursprünglichen Abfrage Post war „OR“ zusammen. Wenn ein Benutzer keinen bestimmten Wert für ein Feld ausfüllt, würden Sie diese Kriterien sowieso ausschließen. Wenn Sie die Kriterien "UND" "AND" wollen, ändern Sie einfach oder und und. Beispiel ...

, wenn Sie eine „Art“ wollte und der Name war „was auch immer“ UND ...

Es sollte funktionieren, wie ich in einigen meiner Abfragen dies regelmäßig tun, wo nicht alle Kriterien erforderlich sind.

Nicht sicher, was Sie mit dem Füllnamen, usw. meinen, aber es könnte eine Verwirrung über MySQL mit "@" als Variablen sein und Sie haben den gleichen "Namen" wie zum Beispiel "@name". Was ich normalerweise getan habe, um eine solche Verwirrung zu vermeiden, ist das Hinzufügen eines Präfixes zum erwarteten Parameter wie "parmName", "parmKind", "parm ...". Verwenden Sie bei der Definition der Parameter NICHT das "@" als String . Siehe meine Revision oben.

+0

hat es nicht funktioniert. auf jeden Fall danke – mrym

+0

@mrym, siehe editierte Antwort zur Klärung bitte. – DRapp

+0

Ich habe getan, was Sie sagten, aber wenn ich auf der Suche angeklickt sagte es füllen nametxt, familytxt und etc. – mrym

1

Ersetzen Sie diese Zeile:

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))"; 

Mit

string qu = "SELECT * FROM [USERS] WHERE (@kind='' or [kind] = @kind) and (@family ='' or [family] LIKE '%' + @family + '%') and (@name = '' or [name] LIKE '%' + @name + '%') and (@username = '' or [username] LIKE '%' + @username + '%') and (@tarikhozviyat='' or [tarikhozviyat] < @tarikhozviyat) and (@tarikhozviyat2 = '' or [tarikhozviyat] > @tarikhozviyat2))"; 

Es beliebige Kombinationen von Parametern suchen, die einige von ihnen leer sein kann und die Abfrage wird sie unterdrücken.

Ich hoffe, für Sie hilfreich zu sein :)

+0

nein, es hat nicht funktioniert, danke . – mrym

+0

Warum? Darf ich wissen, was du nicht arbeitest? –

+0

Wenn ich usernettxt fülle und auf die Suche klicke, zeigt es auf nametxt und sagt, bitte gib dieses Feld aus. – mrym