String ist nicht gleich String

  • VB.NET (ASP)

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von PCase.

    String ist nicht gleich String

    Hallo zusammen,

    ich bin am verzweifeln und komme einfach nicht auf die Lösung meines Problems.

    Ich will eine SQL Abfrage machen, ohne meine Seite neu zu laden. Dies mache ich per Javascript über einen XMLHttpRequest und rufe dabei meine aspx auf. Diese tätigt die Abfrage auf der Datenbank. Per ExecuteReader lese ich aus und hängt alle Zelleninhalte meines SQL-Outputs zu einem großen String zusammen, den ich dann als String zurück senden will. Falls die Frage auftaucht wie viele Zeichen ich denn übergeben will, in der TestSQLAbfrage Ca. 9000.

    Wenn ich mir einen TEST-String in dem per XMLHTTPRequest aufgerufenen aspx-Script generiere (aneinanderhängen von Zeichen z.B. "b"), klappt alles einwandfrei.
    Also getestet habe ich eine Zeichenkette aus "b" mit 100.000 Zeichen. Diese wurden komplett zurück geliefert und ich konnte diese im Javascript per responseText wieder auslesen. Natürlich habe ich diese Zeichenkette auf Vollständigkeit geprüft. 100%.

    Versuche ich jedoch meinen String aus der SQL-Abfrage zu senden, so kommt nur ein leerer String an. Rufe ich die aspx separat im Browser auf, so sehe ich meine komplette Abfrage die per Response.Write richtig ausgegeben wird.

    Meine erste Vermutung war, dass ein unbekanntes Zeichen die Übergabe abbricht. Ich bekomme jedoch keine Fehlermeldung. XMLHTTPRequest State=4 und Status 200.
    Jetzt habe ich meinen StringBuilder so weit reduziert, dass nur die erste Zelle in den String geschrieben wird. Um diesem unbekannten Zeichen auf die schliche zu kommen. Fehlanzeige. Die erste Zelle(Inhalt="20") wird schon nicht übergeben. Response.Write schreibt zwar den Inhalt("20") des Strings, übergibt jedoch nicht zurück an meine Seite1.
    Zelleninhalt stammt aus der Datenbank und ist dort "System.Int32", wird von mir wie unten im Code zu sehen per GetValue(i).ToString() aus dem Reader gelesen und in String konvertiert.

    Mein ContentType steht momentan auf "Text/html", habe aber bereits Windows-1250, UTF-8 ausprobiert, ohne Erfolg.

    Quellcode

    1. While R.Read()
    2. For i = 1 To R.FieldCount - 1
    3. Wort = Wort & R.GetValue(i).ToString() + "; "
    4. Next
    5. End While
    6. R.Close()
    7. Response.Write(Wort)


    Meine Vermutung: die "GetValue.ToString"- Formatierung. :evil:
    Ahoi,

    hast du dir schon mal ausgeben lassen, was zur Laufzeit in

    VB.NET-Quellcode

    1. R.GetValue(i)
    steht ?
    Wohlmöglich kommt nicht viel von der Datenbank zurück.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Japp, wie gesagt, wenn ich die aspx mit Parameter aufrufe, wirft mir die Response.Write den kompletten Abfrage String aus. Somit sind alle Werte für GetValue(i) vorhanden. Nur die übergabe klappt nicht.

    Wenn ich so einen String definieren--> Wort="999" , wird dieser im Response.Write geschrieben, zeigt die aspx alles an, und auf meiner Seite1 kommt 999 an.
    Wenn ich Wort="999" + SQL-String in Response.Write ausgebe, zeigt die aspx alles an, auf meiner Seite1 kommt jedoch nur 999 an.
    Wenn ich Wort= SQL-String +"999" in Response.Write ausgebe, zeigt die aspx alles an, auf meiner Seite1 kommt jedoch nur 999 an.

    Die ToString Formatierung muss einen Fehler im SQL-String verursachen, der diesen Teil dann nicht übergeben lässt. Ein encoding-Problem. Hab mal mit einem encodingscript was ich gefunden habe alles auf Windows-1250 vor dem senden codieren lassen, kein erfolg.

    Per DeveloperTool habe ich meine Javascript auch getestet, kein Fehler, String einfach LEER.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PCase“ ()

    Setz doch einfach mal einen Breakpoint in der Schleife und schaue ob da überhaupt etwas passiert.
    Ich habe mir mal in der MSDN die Überladungen angeschaut und ich denke mal GetValue wird dir nicht das gewünschte Ergebnis bringen.

    Jetzt habe ich, glaube ich erstmal mit bekommen, was du machen willst.
    Schau mal hier rein, Antwort 4 beschreibt dir, wie du das mit einer Foreach-Schleife lösen kannst.
    fände ich persönlich auch schlanker.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Manü“ ()

    sorry Leute, es war natürlich mal wieder ein ganz banaler Fehler.

    Durch mein Rumprobieren zu beginn, habe ich mir die Parameter für das Aufrufen der aspx-Datei aus versehen gelöscht. Dies habe ich nicht gemerkt. Ich war mir sicher ich hab die Parameter übergeben, deswegen habe ich auch nicht darauf geachtet. Um meine Aspx-Datei zu testen bzw. sehen zu können was dort geschieht, musste ich die aspx-Datei einzeln aufrufen (mit manuell eingetragenen Parameter). Dort hat alles wunderbar funktioniert. Jetzt tut alles.

    Was ich da mache? Meine SQL-Abfrage gibt mir eine Stückliste in einer HTML Table aus. Dort sind jedoch teilweise auch Artikel vorhanden, die eigentlich Module sind und wiederum Stücklisten enthalten. Ich wollte mit diese Unter-Stücklisten per Java auf ploppen lassen, damit ich die Seite nicht neu laden muss und eine separate SQL-Abfrage senden kann. Dies funktioniert per Klick auf ein Pluszeichen, das sich in ein Minus verwandelt sobald die Liste aufgeploppt ist. Hab jetzt bis zu 4 Unter-Stücklisten realisiert.

    @Manü: Danke für den Link, Dynamisch eine SQL-Abfrage zu erzeugen habe ich an anderer Stelle schon realisiert. Jedoch rate ich von der "For each" für SQL-Abfragen ab, da diese jeweils einen neuen Request erzeugen und damit den User unnötig viel Zeit kosten.

    Nochmals Danke für eure Hilfe...