Problème de copie en bloc C # vers un type de table SQL

c# datagridview sql sqlbulkcopy

Question

Utilisation de C #, .net 4, Visual Studio 2010 et SQL Server 2008.

J'ai actuellement une table appelée NewPeriodPareto contient les colonnes suivantes:

  • PG nvarchar (50)
  • Partie nvarchar (50)
  • Flottant des ventes
  • LostSales float
  • Pareto6 int
  • image p6
  • Pareto5 int
  • image p5
  • Pareto4 int
  • image p4
  • Pareto3 int
  • image p3
  • CurrentPareto int
  • pNouvelle image
  • NewPareto int

Ce qui suit est mon code qui essaie de remplir le tableau:

private void CreateNewPeriod()
{
        DataSet dsDG = new DataSet();
        DataTable dt = new DataTable();

        dsDG = (DataSet)ParetoGrid.DataSource;
        dt = dsDG.Tables[0];

        string ThetableName = "NewPeriodPareto";
        BulkInsertDataTable(myConn, ThetableName, dt);
}

public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table)
{
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlBulkCopy bulkCopy =
                new SqlBulkCopy
                (
                connection,
                SqlBulkCopyOptions.TableLock |
                SqlBulkCopyOptions.FireTriggers |
                SqlBulkCopyOptions.UseInternalTransaction,
                null
                );

            bulkCopy.DestinationTableName = tableName;
            connection.Open();

            bulkCopy.WriteToServer(table);
            connection.Close();
        }
}

Comme vous pouvez le constater, le code fourni tente de copier les données de mon serveur de données. Le datatable est lié à la source Mes grilles de données.

Voici l'erreur que je reçois:

@ bulkCopy.WriteToServer (table);
La valeur donnée de type Int32 à partir de la source de données ne peut pas être convertie en type image de la colonne cible spécifiée.

La première chose à laquelle j’ai pensé est qu’il y avait un jeu de caractères incorrect dans l’un de mes champs de ma table SQL, mais après plusieurs vérifications, il ne semble y avoir aucun problème.

Donc, ce que je recherche, c’est une solution à ce petit problème, voire une solution alternative / plus simple pour atteindre le même objectif, qui consiste à remplir une table SQL à partir d’un programme DataTable.

Réponse acceptée

[Peu de temps, alors je vais vous donner un indice]

vous devriez regarder dans ColumnMappings de SqlBulkCopy. Cela vous permet de mapper explicitement la colonne de votre source à la cible. Il peut y avoir des colonnes supplémentaires comme un identifiant ou un élément similaire qui gênent actuellement.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi