Connectstring ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Dilbert.

    Connectstring ändern

    Hi,

    ich habe eine (hoffentlich triviale) Frage:

    Ich habe im Designer ein Dataset mit mehreren Tableadaptern gebaut.
    Dabei habe ich darauf geachtet das bei der Verbindung die "Verbindungszeichenfolge" NICHT gespeichert wird.
    Jetzt stelle ich fest, dass das PWD im Klartext im EXE steht!
    OK, vielleicht habe ich nicht aufgepasst und doch gespeichert?
    Wo werde ich das wieder los?
    Außerdem habe ich dadurch eine Nebenwirkung:
    Beim Programmstart werden die Daten tatsächlich aus DIESER Verbindung geholt, obwohl ich schon im "Form-Load" ein
    "TableadapterDummy.Connection.ConnectionString = BaueConnectstring()"
    los lasse.
    Weiterhin füllt er das Grid beim Start, ich will aber beim Start das Grid noch garnicht füllen, das soll erst später per Code mit ".fill" passieren!

    Ich denke das hängt alles zusammen.
    Wo ist der Haken? Oder ist das "by design" und ich gehe das falsch an?

    Bye,

    Dilbert

    Dilbert schrieb:


    Jetzt stelle ich fest, dass das PWD im Klartext im EXE steht!


    Wo steht das Passwort in Klartext? Ich nehme mal an, dass du die Verbindung nicht im Progammcode aufbaust, sondern sie zusammengeklickt hast.

    Dilbert schrieb:


    Wo werde ich das wieder los?


    Schau mal in deine app.config Datei. Da müsste sowas stehen wie

    XML-Quellcode

    1. <add name="ConnectionString" connectionString="Data Source=db.host.de;Initial Catalog=DB_Name;User Id=Username;Password=XXXXXX;" />


    Dilbert schrieb:


    Beim Programmstart werden die Daten tatsächlich aus DIESER Verbindung geholt, obwohl ich schon im "Form-Load" ein


    Klar, es wird dann die Standardkonfig genommen die in deiner Config-Datei eingetragen ist

    Dilbert schrieb:


    "TableadapterDummy.Connection.ConnectionString = BaueConnectstring()"
    los lasse.
    Weiterhin füllt er das Grid beim Start, ich will aber beim Start das Grid noch garnicht füllen, das soll erst später per Code mit ".fill" passieren!


    Hier wäre mal ein Code-Beispiel hilfreich. Wenn wir dir helfen sollen, dann musst du uns den Code liefern und dann schauen wir mal wo wir optimieren können.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Hi,

    @vb1963:
    ja, ich weiss, das ist wirklich etwas schwierig zu erklären.
    Das Problem ist, dass ich die Konfiguration für den Connectstring erst aus der Registry holen muss.
    Also "Vorab" in die App-Config geht so nicht.
    Diese ist außerdem leer. (Also, KEIN Connectstring drin)
    Soll ja auch so sein.

    @Yanbel:
    Das Passwort (welches ich meines Wissens nach NICHT gespeichert habe!) steht tatsächlich in der EXE Datei.
    Natürlich habe ich das auch nirgends im Programmcode!
    Die App-Config ist (bis auf die üblichen Standardeinträge) leer.
    Nix Connectstring drin ;)

    Ein Codebeispiel wäre hier etwas umfangreich, da das Programm recht komplex ist.
    Die wesentlichen Stellen kann ich aber mit wenigen Zeilen beschreiben:

    Bei Button-Klick wird ein Grid gefüllt.
    Dieses ist per Binding-Source an ein (grafisch erstelltes) Dataset/Tableadapter angebunden.
    Beim Programmstart sollte das noch leer sein (Ist aber mit Daten aus der ALTEN Tabelle gefüllt!)
    Per Klick auf den Button soll ein:

    TableadapterLand.Connection.ConnectionString = BaueConnectstring()
    TableadapterLand.Fill(MeinDataSet.tblLand)"

    das füllen. Tut es auch.
    Aber zuerst füllt er es mit den "falschen" Daten!
    Wenn ich den alten DB-Server abstöpsele macht er eine Bedenkpause, in der er versucht diesen zu erreichen.
    Einige Try/Catches greifen und dann geht es weiter.
    Ab dann läuft es auch per Buttonklick einwandfrei, denn der neue Connectstring ist ja hinterlegt...

    Inzwischen habe ich herausgefunden, dass der Connectstring samt PWD im Klartext auch in der Datei
    "MeinDataSet.Designer.vb" und in
    "MeinDataSet.xsd" steht.

    Das finde ich im Designer von VS aber nicht wieder.
    Werde mal versuchen das mit 'nem Editor dort zu ändern...

    Das wird mein Problem aber nur zum Teil lösen, denn was soll ich dort eintragen?
    Er versucht ja dann trotzdem diesen falschen Connectstring zu ... connecten.
    Ist das "normal behavior" ?

    Bye,

    Dilbert

    Dilbert schrieb:

    TableadapterLand.Connection.ConnectionString = BaueConnectstring()
    Versuche es mit einem ConnectionStringBuilder...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Private Function BaueConnectstring() As String
    2. Dim sqlStringBuilder As New MySql.Data.MySqlClient.MySqlConnectionStringBuilder()
    3. sqlStringBuilder.Server = "Dein_server"
    4. sqlStringBuilder.Database = "Deine_Tabelle"
    5. sqlStringBuilder.UserID = "Du"
    6. sqlStringBuilder.Password = "****"
    7. sqlStringBuilder.Port = 3307
    8. Return sqlStringBuilder.ConnectionString
    9. End Function
    Hi,

    die Function "BaueConnectstring" klappt ja, der String ist korrekt.
    Der MySqlConnectionStringBuilder macht ja nix anderes als mir diesen String zu erstellen.
    Zuweisen muss ich ihn dann ja als fertigen String wieder unter TableadapterDummy.Connection.ConnectionString.
    Oder macht der noch was das ich nicht kenne?

    Bye,

    Dilbert
    Ich rate jetzt einfach mal ins Blaue was du gemacht hast:

    Du hast ein typisiertes Dataset erstellt und dieses beim Einrichten deiner Datenquelle mit übergeben, wodurch ein Binding zwischen deinem DataSet und der Datanbanktabelle erstellt wurde. Beim Einrichten der Datenquelle über den Assistenten hast du natürlich das Passwort eingetragen, damit der SQL-Server als Datenquelle eingerichtet werden kann (In diesem Fall findest du das Passwort im SQL-Server-Objekt-Explorer über Ansicht in der obersten Menüleiste). Gesetzt den Fall dass meine Vermutung richtig ist, wird beim Laden direkt über den SQL-Adapter eine Verbindung zu der in der Datenquelle angegebenen Datenbank aufgebaut und durch das Binding zwischen der Tabelle und deinem DataSet wird dieses direkt mit Daten gefüllt und enthält eine 1:1 Darstellung deiner Datenbanktabelle. Über das Binding zwischen deinem DataSet und dem DatagridView werden die Daten dann direkt nach dem Laden angezeigt und das bevor dein Code aus dem Load ausgeführt wird und sich der ConnectionString ändert.

    All diese Annahmen sind allerdings hochspekulativ solange ich deinen Code nicht gesehen habe.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Yanbel“ ()

    @Yanbel:

    Jaaaa!
    Im Prinzip habe ich genau das gemacht.
    Und ich habe auch das PWD im Server-Manager gefunden!
    Prima, ich kann es noch nicht testen, aber ich denke, das ist es.
    Jetzt habe ich aber 1-2 Fragen dazu:
    1.
    Ist es normal, das dieses PWD jetzt im EXE File steht?!?

    2.
    ...werden die Daten dann direkt nach dem Laden angezeigt und das bevor dein Code aus dem Load ausgeführt wird...

    Gibt es eine Möglichkeit, meinen Connectstring VORHER zu übergeben?

    Danke schonmal,

    Dilbert

    Nachtrag:
    Habe die Daten im "Server-Explorer" gefunden. Der hat aber (soweit ich weiß) erstmal nix mit meinem Programm zu tun.
    Im "SQL-Server-Objekt-Explorer" steht bereits die neue DB, die alte find' ich darin nicht.
    Und bei der neuen sind die "Eigenschaften" komplett leer.
    Bilder
    • Bild1.png

      15,96 kB, 604×348, 112 mal angesehen

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

    Ähm, ... äh, ... peinlich, ... ja, das hab' ich gemacht.
    Is mal wieder die Microsoft-typische doppelte Verneinung...
    Ich wollte vertrauliche Daten AUSSCHLIESSEN.
    Also ist Option 2 ja quatsch...
    Dachte ich.
    OK, wer lesen kann...

    Ich werd's gleich testen und schauen was passiert.
    Na gut, ich werd's MORGEN testen.

    Tausendundeinen Dank,

    Dilbert
    Hallo nochmal,

    ich habe das jetzt an einem TestProjekt probiert und es sieht so aus als wäre damit das Problem gelöst, ABER:
    Wo kann ich das bei einem BESTEHENDEN Dataset nachträglich umstellen?
    Ich will das (samt reichlich TableAdaptern) nicht neu machen.
    Ich sehe gerade den Wald vor lauter Bäumen nicht...
    Im TA ist der Connectstring, aber nichts zu finden wo er gespeichert wird...

    kann da nochmal jemand helfen?

    Bye,
    Dilbert