SQL Server 2008 - Die Identität der neu eingefügten Zeilen kann nicht festgestellt werden.

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    SQL Server 2008 - Die Identität der neu eingefügten Zeilen kann nicht festgestellt werden.

    Hi,

    die Fehlermeldung "Die Identität der neu eingefügten Zeilen kann nicht festgestellt werden." ist für mich nicht nachvollziehbar und ich habe sie nun zum ersten Mal vor der Nase.
    Hat irgendjemand einen Tipp was da schief läuft?

    Es handelt sich um ein Programm welches die Lieferstände der von uns versandten Pakete ermittelt. In dem aktuellen Fall werden die Daten bei UPS ausgelesen...

    Der Codeausschnitt ist folgender:

    VB.NET-Quellcode

    1. Dim track As New TrackService()
    2. Dim tr As New TrackRequest()
    3. Dim upss As New UPSSecurity()
    4. Dim upssSvcAccessToken As New UPSSecurityServiceAccessToken()
    5. upssSvcAccessToken.AccessLicenseNumber = "blubbblubb"
    6. upss.ServiceAccessToken = upssSvcAccessToken
    7. Dim upssUsrNameToken As New UPSSecurityUsernameToken()
    8. upssUsrNameToken.Username = "blubbblubb"
    9. upssUsrNameToken.Password = "blubbblubb"
    10. upss.UsernameToken = upssUsrNameToken
    11. track.UPSSecurityValue = upss
    12. Dim request As New RequestType()
    13. Dim requestOption As [String]() = {"15"}
    14. request.RequestOption = requestOption
    15. tr.Request = request
    16. tr.InquiryNumber = rsSQL.Fields("TrackingNr").Value.ToString
    17. System.Net.ServicePointManager.CertificatePolicy = New TrustAllCertificatePolicy()
    18. Dim trackResponse As TrackResponse = track.ProcessTrack(tr)
    19. rsSQL.Fields("Lieferscheinnummer").Value = trackResponse.Shipment(0).ReferenceNumber(0).Value


    In der letzten Zeile tritt der Fehler auf. Zuerst dachte ich, er wäre im Record der Datenbank verruchtscht, jedoch zeigt er mir für andere Felder des Records Werte an... Ein Screenshot anbei.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Nein, das ist es leider nicht. Die API hat korrekte Werte ermittelt.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Doch, auch das Feld existiert... Und hat bislang den Wert DBNull :( (Siehe erster Screenshot unten Links im Überwachungsmonitor)
    Es wird ja bei anderen Datensätzen anstandslos gefüllt nur eben irgendwann... knall und Error...
    Ich versteh das nicht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    So...
    ich habe nun einmal versucht einen Fixwert zu setzen...
    Gleicher Fehler


    Dann dachte ich mir... Überspring einfach mal die Zeile im Code und versuch den nächsten Wert zu setzen... Und gleicher Fehler...
    Also hat es nichts mit den Inhalten zutun
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Also ist es wohl eindeutig, dass es am Feld liegt.
    Die Einstellungen für dieses Feld werden andere sein als für den Rest. Schau mal, ob da zufällig ReadOnly oder sowas steht?

    EDIT: Sehe gerade, beim 2.Mal ist es ein anderes Feld. Ich denke aber, es wird so sein, dass die vorige Fehlermeldung einfach wiederausgegeben wird.
    Ich denke nicht dass es am Feld liegt, da im zweiten Screenshot zu sehen ist, dass es sich bei einem anderen Feld des gleichen Datensatzes identisch verhält.
    Ich denke es liegt am entsprechenden Datensatz.

    EDIT:
    Auch wenn ich den Befehl mit der Lieferscheinnummer auskommentiere, wird beim Datensatz dann das Nächste Feld angemeckert.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Habe schon editiert. Nur, weil du in deinem Programm weitergehst, heißt es nicht, dass das SQL-Ding die Fehlermeldung ignoriert. Es kann sein, wenn einmal Fehler drin war, dass der Fehler weiterausgegeben wird.

    Kommentier mal die Zeile mit 40 aus und schau, ob es dann läuft. Du sagtest doch selbst, dass andere Felder funktioniert haben.

    EDIT: wir überschneiden uns dauernd.
    Ich sehe erst jetzt, dass es überhaupt das erste Feld ist, welches du hier ansprichst. Dann wird wohl an deinem SQL-Ding was schief sein. Wo hast du das "rsSQL" her?
    Das ist nicht ganz korrekt...
    Im Code darüber wird schon ein Feld angesprochen. (die TrackingNr).
    Und darüber gibt es noch ein "insert" Statement (was aber nicht immer ausgeführt wird)

    VB.NET-Quellcode

    1. SQL = "SELECT * FROM Kopfdaten " & _
    2. "WHERE TrackingNr = '" & rsPA.Fields("Trackingnummer").Value.ToString & "' " & _
    3. "AND Spediteur = '" & rsPA.Fields("Spediteur").Value.ToString & "' "
    4. rsSQL.Open(SQL, conSQL, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, 1)
    5. If rsSQL.EOF Then
    6. rsSQL.AddNew()
    7. rsSQL.Fields("TrackingNr").Value = rsPA.Fields("Trackingnummer").Value.ToString
    8. rsSQL.Fields("Spediteur").Value = rsPA.Fields("Spediteur").Value.ToString
    9. rsSQL.Fields("Ausgeliefert").Value = False
    10. rsSQL.Update()
    11. End If
    12. If rsSQL.Fields("Ausgeliefert").Value = False And rsPA.Fields("Spediteur").Value.ToString = "UPS" Then
    13. Dim track As New TrackService()
    14. Dim tr As New TrackRequest()
    15. Dim upss As New UPSSecurity()
    16. Dim upssSvcAccessToken As New UPSSecurityServiceAccessToken()
    17. upssSvcAccessToken.AccessLicenseNumber = "blubbblubb"
    18. upss.ServiceAccessToken = upssSvcAccessToken
    19. Dim upssUsrNameToken As New UPSSecurityUsernameToken()
    20. upssUsrNameToken.Username = "blubbblubb"
    21. upssUsrNameToken.Password = "blubbblubb"
    22. upss.UsernameToken = upssUsrNameToken
    23. track.UPSSecurityValue = upss
    24. Dim request As New RequestType()
    25. Dim requestOption As [String]() = {"15"}
    26. request.RequestOption = requestOption
    27. tr.Request = request
    28. tr.InquiryNumber = rsSQL.Fields("TrackingNr").Value.ToString
    29. System.Net.ServicePointManager.CertificatePolicy = New TrustAllCertificatePolicy()
    30. Dim trackResponse As TrackResponse = track.ProcessTrack(tr)
    31. rsSQL.Fields("Lieferscheinnummer").Value = trackResponse.Shipment(0).ReferenceNumber(0).Value
    32. rsSQL.Fields("Versandart").Value = trackResponse.Shipment(0).Service.Description
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Im Code darüber wird schon ein Feld angesprochen. (die TrackingNr).

    Es wird aber gelesen und nicht geschrieben. Die Exception bekommst du, wenn du schreiben willst. Also wird es daran liegen, dass du irgendwie nicht beschreiben darfst.

    EDIT: Doch, bei einem IF werden sie auch beschrieben. Hast du mal da Haltepunkt gesetzt, wird es durchgelaufen?
    Ich beschreibe ja mit
    rsSQL.Fields("TrackingNr").Value = rsPA.Fields("Trackingnummer").Value.ToString
    rsSQL.Fields("Spediteur").Value = rsPA.Fields("Spediteur").Value.ToString
    rsSQL.Fields("Ausgeliefert").Value = False

    Felder in eben jenem Datensatz. Bislang wird diese Schleife immer ausgeführt, da ich die Testtabelle vor jedem Lauf resette und somit nie Werte enthalten sind.
    Sprich... wenn er die Lieferscheinnummer schreiben will, muss er im Vorfeld schon im gleichen RS TrackingNr, Spediteur und Ausgeliefert gesetzt haben.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Die unterschiedlichen Felder sind dadurch bedingt, dass ich mit dem rsPA direkt auf die Echtumgebung unseres ERP-Systems zugreife. Dort sind die Trackingnummer und der jeweilige Spediteur bei den Lieferscheinen hinterlegt. Ich werd aber nen Teufel tun und ne Anwendung in die Echt-Umgebung schreiben lassen ;)
    Demnach benutze ich hierfür nen Test-SQL-Server (rsSQL) und übernehme dort zuerst die Werte vom ERP-System und greife anschließend auf die UPS API zu um die zusätzlichen Daten abzufragen.

    Hoffe das war verständlich ;)

    Das mit dem Haltepunkt ist so ne Sache. Er schreibt ja immer erst meherere Datensätze korrekt und irgendwann kommt dann (für mich nicht vorhersehbar) dieser Fehler. Ich habe natürlich alles einmal debuggt und da arbeitet er sauber... Aber beim X-Ten Datensatz knallt es dann.


    EDIT:
    ich habe nen Haltepunkt direkt auf

    VB.NET-Quellcode

    1. SQL = "SELECT * FROM Kopfdaten " & _
    2. "WHERE TrackingNr = '" & rsPA.Fields("Trackingnummer").Value.ToString & "' " & _
    3. "AND Spediteur = '" & rsPA.Fields("Spediteur").Value.ToString & "' "

    gesetzt und als Bedingung die Trackingnummer hinterlegt. Nun hat er die If-Abfrage korrekt durchlaufen und die Felder auch gesetzt.
    Er lief fehlerlos weiter, bis er die Lieferscheinnummer setzen sollte.
    Kann er sich an dem rsSQL.Update verhaspeln?!

    EDIT: Es scheint wirklich an dem Update gelegen zu haben...
    Ich habe nun vor dem Close ein Update in Try-Catch gesetzt... (ich weiß ist unsauber... werd ich noch mit nem Bool prüfen müssen) aber nu geht's...
    Ich versteh das gerade nicht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Siehe oben.
    Er hat sich am Update verhaspelt. Nicht für mich nachvollziehbar...
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ich habe es nun auch mal mit wieder einkommentiertem Update und dem direkt anschließendem Zuweisen von dem Fixwert 40 versucht. Der Fehler tritt auch hier auf.
    Anscheinend stimmt da etwas mit dem Update und anschließendem Ändern der Werte nicht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D