Announcement

Collapse
No announcement yet.

Strings immer in voller Länge in der DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Strings immer in voller Länge in der DB

    Hallo zusammen!

    Da bin ich wieder...

    Ich bin mir nicht sicher, wo mein Problem am besten aufgehoben ist, da es Bereichsübergreifend ist. Also versuche ich es zuerst mal hier:

    Ich schreibe mittels UPDATE-Statements Daten in Felder einer SQL-Datenbank. Dabei tritt aber der seltsame Effekt auf, daß bei Stringfeldern in der Datenbank immer das Feld in voller Länge gefüllt wird, obwohl ich natürlich nicht so lange WErte übergebe.

    Beispiel:
    Das Datenbankfeld "Name1" ist vom Typ nchar(40)

    im C#-Source (nur mal die Zeilen für dieses eine Feld):

    q.CommandText = "UPDATE Tabelle SET Name1 = @Name1 WHERE ID = @ID";

    q.Parameters.Add("@Name1", SqlDbType.VarChar);

    q.Parameters["@Name1"].Value = Wert; // string Wert

    q.ExecuteNonQuery();


    Wenn als Wert "NextX" übergeben wird, so enthält die DB "NextX " (auf 40 Zeichen mit Leerzeichen aufgefüllt.)
    Der Inhalt wird auch mit dem Management Studio so angezeigt, ist also keine Anzeigeproblematik meines Programmes.

    Was mache ich falsch? Muss ich einen anderen SqlDbType oder einen anderen Feldtyp verwenden? Oder die Daten irgendwie anders übergeben?

    Danke für die Tipps.

    Ciao,
    N.

  • #2
    Hängt von deiner DB und deren Einstellungen ab -> varchar wird offenbar so wie es bei dir eingestellt ist auf die volle Länge expandiert.
    Christian

    Comment


    • #3
      (n)char-Felder verhalten sich so. Du brauchst (n)varchar-Felder. Siehe auch Wikipedia

      Comment


      • #4
        Originally posted by Bernhard Geyer View Post
        (n)char-Felder verhalten sich so. Du brauchst (n)varchar-Felder. Siehe auch Wikipedia
        Das war es tatsächlich!

        Nachdem ich die Felder auf varchar() umgestellt habe, wird nichts mehr angehängt.
        Nur nervt das Management Studio (ich nutzt SQLexpress 2005) beim umstellen von nchar(10) auf varchar(10), daß Inhalte verloren gehen würden und will immer einen varchar(50) machen. Erst im 2. Anlauf nimmt es dann die Länge 10.

        Ist nchar(10) inhaltlich nicht genau so lang wie varchar(10)?

        Bei meinem ersten Test konnte ich keinen Datenverlusst feststellen. Ich kann immernoch 10 Zeichen in das Feld packen.

        Ciao,
        N.

        Comment


        • #5
          Moment! Du solltest auch nvarchar nehmen und nicht die Ansi-Version varchar

          Comment


          • #6
            Du hast Recht! Jetzt kommt die Meldung nicht mehr.

            Jetzt fällt mir auch auf, dass die meisten anderen Tabellen der DB auch bereits mit NVARCHAR definiert sind.

            Lästig ist jetzt nur, dass der Property-Editor im Management Studio bei jedem Wechsel des Datentyps erst mal eine Länge von 50 angibt, die dann wieder auf die richtige Länge geändert werden muss.
            Aber das ist eine einmalige Sache und trifft nur ca. 40 Felder. Damit kann ich leben.

            Danke für die Info! Ich hätte das nie selbst gefunden!

            Ciao,
            N.

            Comment

            Working...
            X