Announcement

Collapse
No announcement yet.

PK-Spalten verändern

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

  • PK-Spalten verändern

    Hallo Leute!

    Ich schreibe momentan einen Konverter, der eine Access-Datenbank in ein neues Schema konvertiert und diese änderungen dann in einen MSSQL 2005 schreibt.

    Im Grunde kopiere ich alle Datensätze und nehme die notwendigen änderungen vor ( Meistens irgendwelche Schleifen, um die neuen Verknüpfungen zu setzen ). Eigentlich klappt das auch ganz gut, nur kopiere ich eben auch die PK-Spalten, so mache ich es mir eigentlich relativ einfach und im Prinzip müsste das auch so funktionieren.

    Zum schreiben auf die MSSQL-DB nutze ich einfach Table-Adapter. Ich füge neue Data-Rows hinzu und speichere die dann später einfach mit der Update()-Methode, des jeweiligen Table Adapters.

    Nun habe ich jedoch ein Problem. Der MSSQL übernimmt nicht meine PK-Spalten, sondern generiert sich selbst welche ( Zählt selbst hoch ). Damit funktioniert mein Prinzip der konvertierung natürlich garnicht.

    Habt ihr evtl. eine Idee, wie man diese Option auf dem MSSQL ausstellen kann und ihn dazu bewegt meine ID's zu benutzen?

    Hier mal das Szenario mit ein wenig code beschrieben:

    Code:
    for each dRow_alt As DataRow in Me.AccessDB.Adressen.Rows
    Dim dRow_neu As DataRow = Me.MSSQLDB.tbl_Adressen.newRow()
    
    dRow_neu.Item("ID") = dRow_alt.Item("ID")
    dRow_neu.Item("Nachname") = dRow_alt.Item("Nachname")
    'usw....
    
    'Row hinzufüegen
    Me.MSSQLDB.tbl_Adressen.Rows.add(dRow_neu)
    
    next
    
    'nun speichern
    Me.tbl_AdressenTableAdapter.Update(Me.MSSQLDB.tbl_Adressen)

    Greetz, Sebbi

    //Edit: Ok, ich weiss nun woran es gelegen hat. Man muss einfach das Autoincrement auf den Spalten herausnehmen!

    Nun habe ich jedoch ein anderes Problem. Und zwar bekomme ich nun immer folgende Fehlermeldung bei einem Update:

    System.Data.SqlClient.SqlException wurde nicht behandelt.
    Class=16
    ErrorCode=-2146232060
    LineNumber=1
    Message="Der Wert NULL kann in die 'ID'-Spalte, 'test.dbo.tbl_Schulung'-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT.
    Die Anweisung wurde beendet.
    "
    Number=515
    Procedure=""
    Server="192.168.0.101\SQLEXPRESS"
    Source=".Net SqlClient Data Provider"
    State=2


    Scheinbar nimmt er nicht meine ID-Werte, die ich ihm übergeben habe . Jetzt müsste ich nur noch wissen, wie ich das umgehen kann.
    Zuletzt editiert von Sebischn; 01.08.2007, 13:25.

  • #2
    PK-Spalten ändern

    Hallo,

    ich vermute, dass das PK-Feld die IDENTITY-Eigenschaft gesetzt hat.

    CREATE TABLE T_User
    (
    UserID INT IDENTITY(1,1) NOT NULL,
    ...

    Das IDENTITY muss entfernt werden.

    Reinhold P.
    Zuletzt editiert von Reinhold_P; 02.08.2007, 14:03.

    Comment


    • #3
      Man muss nicht die Tabellen-Definition ändern, die IDENTITY-Eigenschaft kann man auch temporär abschalten mit SET IDENTITY_INSERT. Hier steht's, wie es gemacht wird: http://msdn2.microsoft.com/de-de/library/ms188059.aspx.

      Gruß,
      Martin

      Comment

      Working...
      X