Ich versuche, ein DataTable
zu kopieren, das die folgenden Spalten hat:
System.Int32
System.String
In eine SQL-Datenbank mit den folgenden Spalten:
int
geometry
Kann jemand auf die beste Weise beraten, dies zu tun?
Irgendein Testcode, wenn es hilft ...
%Vor%Mein ursprünglicher Beitrag konnte nicht erklären, dass das Ausführen des oben genannten Vorgangs zum Auslösen der folgenden Ausnahme führt.
InvalidOperationException: Der angegebene Wert vom Typ String aus der Datenquelle kann nicht in den Typ udt der angegebenen Zielspalte konvertiert werden.
Ich gehe davon aus, dass SqlBulkCopy
den Spaltentyp geometry
nicht kennt und daher nicht weiß, wie man ihn von string
konvertieren kann. Kann das jemand bestätigen?
Ihre Spalte "Geom" muss vom Typ SqlGeometry
sein, keine Zeichenfolge. Sql Server erwartet einen benutzerdefinierten Typ (UDT) für eine Geometriespalte in einer Einfügung. Das würde ich verwenden:
Beachten Sie, dass wir den tatsächlichen SqlGeometry-Typ aus Ihrer Zeichenfolge erstellen. Die Masseninsertion wird dafür sorgen, dass sie in ein Binärformat konvertiert wird, das SqlServer erkennt.
Ich bin mir auch nicht sicher, warum Sie mehrere Datensätze mit derselben ID einfügen möchten (Sie haben alle die ID 1 in Ihrer Stichprobe).
Viel Glück!
Wenn die Desintationstabelle dieselbe Spaltenstruktur wie Ihre DataTable aufweist, müssen Sie die Spalten nicht zuordnen. Wenn sich die Desintationstabelle in der Struktur von Ihrer DataTable unterscheidet, müssen Sie jede Spalte zuordnen.
%Vor%Sie haben gerade festgestellt, dass Sie für Ihre SQL-Spalte keinen varchar verwenden. In diesem Fall denke ich am besten daran, eine sp zu verwenden, um die Tabelle aufzufüllen, und die gespeicherte Prozedur mithilfe der Array-Bindung auszuführen. Hier ist ein Beispiel, das ich mit Oracle gemacht habe. Sie können es ändern und vereinfachen es viel mehr bei der Verwendung von SQL Server.
%Vor%Wo ich eine Insert-Anweisung erstelle, können Sie einen Aufruf der gespeicherten Prozedur einfügen und bei Bedarf parametrisieren.
Tags und Links .net sql-server c# sqlbulkcopy sqlgeometry