Laden...

Datenbank findet nichts

Erstellt von MichealGaudian vor 14 Jahren Letzter Beitrag vor 14 Jahren 981 Views
M
MichealGaudian Themenstarter:in
33 Beiträge seit 2009
vor 14 Jahren
Datenbank findet nichts

verwendetes Datenbanksystem: SQL SERVER 2005

Query-Statement


SELECT Filename,
FROM aspnet_Daten 
WHERE (Filename LIKE '%' + @name + '%' + @name2 + '%') 
                                        
<SelectParameters>
  <asp:Parameter Name="name" />
  <asp:Parameter Name="name2" Type=String/>
</SelectParameters>

Ich benutze ein Querybuilder mit dem ich die SELECT-Abfrage basteln bzw gleich testen kann.
Bei dem Test im Querybuilder muss ich nur noch name&name2 angeben.
Wenn ich z.B. für name = calc und für name2= (nichts) angeben. Bekomme ich auch dass richtige Ergebnis. Nämlich in dem Fall calc.exe. Auch wenn ich z.B danach suche. name=ca ,, name2=exe. Findet er mir calc.exe richtig

Im Quelltext sieht das ganze so aus:


   DataView dv_daten();


   datasource.SelectParameters.Clear();
   datasource.SelectParameters.Add("name", name);
   datasource.SelectParameters.Add("name2", name1);
   dssa = new DataSourceSelectArguments();
   dssa.AddSupportedCapabilities(DataSourceCapabilities.Page);
   dv_daten = (DataView)datasource.Select(dssa);

Im Prinzip genau das selbe wie im Test vom QueryBuilder.
Es werden nur noch die Werte für die Parameters mitgegeben.
Normalerweiße speichert er sobald etwas gefunden wird, das Ergebnis in dv_daten.

Wenn ich z.B das hier mach:
string name = "ca";
string name1 = "exe";
Findet er mir dass richtige Ergebnis. auch wieder calc.exe. Genau wie beim QueryBuilder!
Soweit is es ja noch gut. Aber!!!

Wenn ich das hier mach: 1 Beispiel vom QueryBuilder
string name = "calc";
string name1 = ""; //nichts
Findet er einfach nichts...Obwohl wenn ich das im QueryBuilder das test, es geht!!

Kann mir da bitte jemand weiterhelfen??
Danke

C
101 Beiträge seit 2008
vor 14 Jahren

probier mal anstatt nichts ein stern mitzugeben.

3.825 Beiträge seit 2006
vor 14 Jahren

Oder

string name1 = null; //nichts

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
MichealGaudian Themenstarter:in
33 Beiträge seit 2009
vor 14 Jahren

danke füe die antworten..
aber leider geht beides nicht.
sowohl im C#-code als auch im QueryBuilder

M
MichealGaudian Themenstarter:in
33 Beiträge seit 2009
vor 14 Jahren

vllt hat jemand zufällig ne ganz andere Lösung wie ich das Lösen kann.

Ich hatte es erst so..


SELECT Filename
FROM aspnet_Daten 
WHERE (Filename LIKE '%' + @name + '%') 
                                        
<SelectParameters>
  <asp:Parameter Name="name" />
</SelectParameters>

dann konnt ich für @name = calc eingeben und es hat sowohl im QueryBuilder als auch im Programm etwas gefunden...
aber ich wollte das ganze erweitern z.b. wenn jemand das hier in der Suche(im Programm selber) eingibt.. ca*exe
für @name = ca und für @name2 = exe.. klappt ja auch aber wenn etz jemand ohne ein stern suchen will z.B nach calc.. dann is ein parameter ja zuviel!!!

J
3.331 Beiträge seit 2006
vor 14 Jahren

Ich würde die '%' als Teil des Parameter-Werts übergeben und nicht als Teil des Strings:

SELECT Filename
FROM aspnet_Daten 
WHERE (Filename LIKE @name) 
   datasource.SelectParameters["name"].Value = "%" + name + "%";

aber ohne Gewähr
Jürgen

X
1.177 Beiträge seit 2006
vor 14 Jahren

huhu,

juetho hat Recht, die '%' gehören zum Parameter, nicht in den Query-String. Zu deinem "nicht fuuktionierenden" Beispiel. Dein Query-String sieht dann z.B. so aus:


Select Filename from aspnet where Filename like '%calc%%'

bzw.


Select Filename from aspnet where Filename like '%calc%NULL%'

was definitiv falsch ist. Mach die "%" in den Parameter und füge den 2. Parameter nur dann in die SQL an, wenn er nicht null und länger als 1 ist. (Wenn man Parameter verwendet darf man auch den SQL-String variabel zusammensetzen! Aber nur dann^^) Alternativ Kannst Du auch beim 2. Parameter immer einen Punkt mitgeben (da es ja die Extension ist).

Schau mal mit dem SQL-Server Profiler was denn deine funktionierende Lösung mit Query-Builder an den Server schickt.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.