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:
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.
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.
Comment