[Fehler] DataColumn MaxLength

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    [Fehler] DataColumn MaxLength

    Heee Leutz. :)

    Ich habe mir ein Dataset erstellt und u.a. ein Datatyp String (TextBox) erstellt. Die MaxLength habe ich auf 999999999 festgelegt. Wenn ich nun etwas in die TextBox eintrage und speichere, dann sind beim Aktualisieren hingegen aber immer nur 99 Zeichen drin! ?(



    Woran liegt das?

    VB.NET-Quellcode

    1. result(0).Memos = result(0).Memos & "Zugang wurde am " & CStr(Date.Now) & " gesperrt. " & vbNewLine
    2. save()
    3. 'save()
    4. Me.Validate()
    5. Me.UsersBindingSource.EndEdit()
    6. Me.TableAdapterManager.UpdateAll(Me.PBox_oUserDataSet)


    Hinzufügen und Speichern klappt auch. Der Text lässt sich auch vollständig anzeigen. Sobald aber das Dataset aktualisiert wird, sind nur 99 Zeichen in der Textbox. Der Rest ist weg... :S
    ja ist doch kein wunder
    result(0).Memos = result(0).Memos & "Zugang wurde am " & CStr(Date.Now) & " gesperrt. " & vbNewLine
    du ersetzt ja result(0).Memos mit dem was hinter dem = steht

    Zudem solltest du lieber
    Date.Now.ToString() sowie Environment.NewLine nutzen
    Hm, ne. Ich habe es auf MaxLength 999999999 und es stehen aber immer nur leider 99 Zeichen drin... :S

    Memos ist die Textbox. :)

    VB.NET-Quellcode

    1. Dim result = From p In Me.PBox_oUserDataSet.users Where p.Username = userName Select p
    2. result(0).Memos = 'Historie zu "Username"
    Die Definition für nvarchar beim SQL-Server ist hier reichlich merkwürdig:
    nvarchar [ ( n | max ) ]
    n definiert die Zeichenfolgenlänge und kann ein Wert von 1 bis 4.000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt. Die Speichergröße in Bytes beträgt zweimal die tatsächliche Länge der eingegebenen Daten + 2 Byte.
    Wenn n in einer Datendefinitions- oder Variablendeklarationsanweisung nicht angegeben ist, beträgt die Standardlänge 1. Falls n in der CAST-Funktion nicht angegeben ist, beträgt die Standardlänge 30
    Egal wie ich's drehe, auf 99 komme ich nicht.

    Bei ntext ist es einfacher:
    Unicode-Daten variabler Länge mit einer maximalen Zeichenfolgenlänge von 2^30 - 1 (1.073.741.823) Bytes. Die Speichergröße in Bytes ist doppelt so groß wie die eingegebene Zeichenfolgenlänge.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    xtts02 schrieb:

    Memo-Column vom nvarchar auf ntext
    Das habe ich jetzt getan. Leider zeigt die TextBox nach dem Speichern wieder nur 99 Zeichen an. Ich habe die TextBox nun durch eine RichTextBox ersetzt; leider dasselbe Ergebnis. ;(

    petaod schrieb:

    Egal wie ich's drehe, auf 99 komme ich nicht.
    :thumbsup: Ich auch nicht so wirklich....

    Vielleicht muss ich das Projekt einfach nochmals schreiben und schauen, was dabei raus kommt...
    Ich habe jetzt das Dataset nochmals neu erstellt.
    Leider tritt der selbe Fehler wieder auf. :S Ich hänge auch mal die SQL Abfrage des UpdateCommand mit an. :)

    SQL-Abfrage

    1. UPDATE users
    2. SET ID = @p1, Name = @p2, Vorname = @p3, erstellt = @p4, geändert = @p5, Username = @p6, Password = @p7, IsClosedOff = @p8, IsAdmin = @p9, IsOnline = @p10,
    3. Memo = @p11
    4. WHERE (ID = @p12) AND (geändert IS NULL) OR
    5. (ID = @p12) AND (geändert = @p14)



    M.E. ist hier nichts "verstellt". Weshalb speichert das Dataset aber immer nur 99 Zeichen ab? Ahso, DataTyp in SQL ist nvarchar.

    EDIT// Hier habt ihr die ZIP. :)
    Dateien
    • P-BOX.zip

      (228,29 kB, 218 mal heruntergeladen, zuletzt: )

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

    Vermutlich liegt der Fehler beim Zusammensetzen der Infos, denn die Datenbank kann 'langen' Text aufnehmen.
    Habe beim Erstellen eines neuen Users einen 3500 Zeichen langen Text hinzugefügt. Das geht ohne Problem.
    Siehe Anhang


    PS: Eine zusätzliche Methode AddNewUserist nicht nötig, denn das DataSet bietet Dir genau dieselbe Methode schon an.
    Me.PBox_oUserDataSet.users.AddusersRow - Achte auf die zweite Überladung.
    Hm, das ist schon mal interessant. :)
    AddNewUser wird verwendet in Kombination mit Erstellung eines Hash. Daher habe ich nicht AddUserRow verwendet.

    Mir ist beim Debuggen nicht wirklich etwas aufgefallen. Weitere Zeilen füge ich mit vbNewLine hinzu...