SqlBulkCopy kann Datensätze nicht speichern, mit der Fehlermeldung „Die angegebene ColumnMapping stimmt mit keiner SpaltC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 SqlBulkCopy kann Datensätze nicht speichern, mit der Fehlermeldung „Die angegebene ColumnMapping stimmt mit keiner Spalt

Post by Anonymous »

Ich habe eine Tabelle wie folgt definiert:

Code: Select all

CREATE TABLE [staging].[tbPositionAssetIdentifier]
(
[StageID] [int] IDENTITY(1,1) NOT NULL,
[AssetId] [nvarchar](50) NULL,
[SecurityDescription] [nvarchar](max) NULL,
[Sedol] [nvarchar](50) NULL,
[isin] [nvarchar](50) NULL,
[secTicker] [nvarchar](50) NULL,
[secType] [nvarchar](50) NULL,

PRIMARY KEY CLUSTERED ([StageID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Und ich habe eine Klasse dafür definiert:

Code: Select all

public class AssetData
{
[JsonPropertyName("assetId")]
public string? AssetID { get; set; }

[JsonPropertyName("secDesc1")]
public string? SecurityDescription { get; set; }

[JsonPropertyName("sedol")]
public string? Sedol { get; set; }

[JsonPropertyName("secTicker")]
public string? secTicker { get; set; }

[JsonPropertyName("isin")]
public string? isin { get; set; }

[JsonPropertyName("secType")]
public string? secType { get; set; }
}
Ich versuche, eine Liste von AssetData in der Datenbanktabelle tbPositionAssetIdentifier mit SqlBulkCopy zu speichern, wie unten gezeigt, aber es schlägt mit einer Ausnahme fehl

Die angegebene ColumnMapping stimmt mit keiner Spalte in der Quelle oder dem Ziel überein

Code:

Code: Select all

public static async Task SaveToDBAsync(
List records,
string connectionString,
string tableName)
{
if (records == null || records.Count == 0)
return;

var entityType = typeof(T);
var properties = entityType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead)
.ToList();

using var connection = new SqlConnection(connectionString);

await connection.OpenAsync();
using var bulkCopy = new SqlBulkCopy(connection);

bulkCopy.DestinationTableName = tableName;

var dataTable = new DataTable();

foreach (var property in properties)
{
bulkCopy.ColumnMappings.Add(property.Name, property.Name);
dataTable.Columns.Add(property.Name, property.PropertyType);
}

foreach (var record in records)
{
var row = dataTable.NewRow();

foreach (var property in properties)
{
row[property.Name] = property.GetValue(record) ?? DBNull.Value;
}

dataTable.Rows.Add(row);
}

await bulkCopy.WriteToServerAsync(dataTable);
}
Könnte mir bitte jemand helfen, warum es fehlschlägt und was die Lösung dafür ist? Für jede Hilfe oder jeden Rat wäre ich dankbar. Vielen Dank im Voraus

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post