Types incompatibles C # SqlBulkCopy

c# sqlbulkcopy

Question

J'ai un DataTable qui a 10 colonnes et après y avoir ajouté quelques lignes, je veux l'ajouter à la base de données en utilisant SqlBulkCopy .

Mon problème est que dans le DataTable, j'ai des chaînes et que certains champs de la base de données sont décimaux et datés respectivement. Existe-t-il un moyen de les convertir vers les types de données souhaités?

Réponse acceptée

Lorsque vous ajoutez des colonnes à votre DataTable par programme, vous pouvez spécifier le type: -

DataTable dt = new DataTable();
dt.Columns.Add("FieldName", typeof(System.Decimal));

Ceux-ci seront honorés lorsque vous effectuerez la copie en bloc.

MODIFIER

En réponse au commentaire de l'utilisateur.

Lorsque peuplant DataRow avec des informations, une conversion explicite est nécessaire que si les données source ne correspond pas au champ cible.

Si les types sont les mêmes, vous pouvez simplement les attribuer.

par exemple

// With a decimal field, decimal target
Decimal myNum = 123;
// Works fine - assuming the Price datacolumn has been set up as a System.Decimal
row["Price"] = myNum;

Réponse populaire

Avait le même problème où dans j'étais supposé copier les données d'un fichier Excel qui avait des chaînes et je voulais qu'elles soient stockées dans la base de données en double J'ai collé le code lié à la question ci-dessous: -

DataTable dt = new DataTable();

// Lire les données de la première feuille

    connExcel.Open();
    cmdExcel.CommandText = "SELECT * From [" + SheetName + "] ";
        oda.SelectCommand = cmdExcel;
        oda.Fill(dt);
        connExcel.Close();


        Convert.ToDouble(dt.Columns["Product"]);

// où produit (température du produit) est la colonne dont le type de données dans la base de données est float et dans le fichier Excel est string.



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