Fehler „Der Datentyp einer Spalte kann nicht geändert werden, sobald sie Daten enthält“ im Visual Studio 2005 DataSet Designer
-
09-06-2019 - |
Frage
Ich habe ein DataSet in VisualStudio 2005.Ich muss den Datentyp einer Spalte in einer der Datentabellen ändern System.Int32
Zu System.Decimal
.Wenn ich versuche, den Datentyp in zu ändern DataSet Designer
Ich erhalte die folgende Fehlermeldung:
Der Eigenschaftswert ist ungültig.Der Datentyp einer Spalte kann nach Daten nicht geändert werden.
Nach meinem Verständnis sollte dies eine Änderung des Datentyps im Schema für das DataSet bedeuten.Ich verstehe nicht, wie es irgendwelche Daten geben kann, die diesen Fehler verursachen können.
Hat jemand irgendwelche Ideen?
Lösung
Ich erhalte den gleichen Fehler, aber nur für Spalten mit DefaultValue
auf einen beliebigen Wert (außer dem Standardwert) setzen <DBNull>
).Ich habe dieses Problem folgendermaßen umgangen:
- Spalte Standardwert:Eintippen
<DBNull>
- Speichern Sie den Datensatz und öffnen Sie ihn erneut
Andere Tipps
Da gefüllte Datentabellen keine Änderung im Schema zulassen, kann eine Problemumgehung wie folgt angewendet werden:
Erstellen Sie eine neue Datentabelle
Verwenden Sie die Klonmethode von DataTable, um das DataTable mit derselben Struktur zu erstellen und Änderungen an dieser Spalte vorzunehmen
Verwenden Sie am Ende die Importrow -Methode von DataTable, um sie mit Daten zu füllen.
HTH
Ich habe eine Lösung gefunden.Wenn ich die Datenspalte lösche und sie mit dem anderen Datentyp wieder hinzufüge, funktioniert es.
Für diejenigen, die dies über Google finden und einen etwas anderen Fall haben, in dem Ihre Tabelle Daten enthält und Sie eine neue Spalte hinzufügen (wie ich): Wenn Sie die Spalte erstellen und den Datentyp in separaten Anweisungen festlegen, erhalten Sie ebenfalls dieselbe Ausnahme.Wenn Sie dies jedoch in derselben Anweisung tun, funktioniert es einwandfrei.
Also statt dessen:
var column = myTable.Columns.Add("Column1");
column.DataType = typeof(int); //nope, exception!
Mach das:
var column = myTable.Columns.Add("Column1", typeof(int));