Impossible de convertir le paramètre de la valeur à partir d'une Chaîne en un nombre Décimal

Im importation d'un fichier csv à ma table sql server en utilisant le code suivant

SqlCommand nonqueryCommand = myConnection.CreateCommand();
nonqueryCommand.CommandText = 
                 "INSERT INTO MYTABLE VALUES(@num1, @num2,@num3,@num4)";

nonqueryCommand.Parameters.Add("@num1",SqlDbType.Decimal);
nonqueryCommand.Parameters.Add("@num2", SqlDbType.Decimal);
nonqueryCommand.Parameters.Add("@num3", SqlDbType.Decimal);
nonqueryCommand.Parameters.Add("@num4", SqlDbType.Decimal);

nonqueryCommand.Parameters["@num1"].Value = crntRecord[0];
nonqueryCommand.Parameters["@num2"].Value = crntRecord[1];
nonqueryCommand.Parameters["@num3"].Value =crntRecord[3];
nonqueryCommand.Parameters["@num4"].Value = crntRecord[4];

nonqueryCommand.ExecuteNonQuery();

où le paramètre 3 et 4 sont de type decimal(9,6) dans le DDL lorsque j'exécute le code à ExecuteNonQuery - je obtenir de l'exception suivante

Impossible de convertir le paramètre de la valeur à partir d'une Chaîne en un nombre Décimal.

merci de m'aider à trouver le problème tnx.

MODIFIER

la valeur dans la crntRecord[3] ressemble

Impossible de convertir le paramètre de la valeur à partir d'une Chaîne en un nombre Décimal

  • Quelles sont les valeurs exactes que "crntRecord" tableau contient?
  • Ne savez pas quel type de crntRecord est. Si c'est un DataRow, crntRecord[0] serait de type object qui très probablement peut-être un string.
  • Pourriez-vous fournir un exemple de ce que les valeurs de la crntRecord tableau sont?
  • Avez-vous réglé votre programme et vérifié les valeurs de crntRecord des indices 0, 1, 3, et 4? Je suppose qu'au moins l'un de ces non-numérique.
  • Je me risquerais à deviner que le type retourné par crntRecord[3] et crntRecord[4] sont String. Vous pouvez le vérifier en ajoutant: string test = crntRecord[3] et de la vérification pour voir si il compile.
  • Singh Chouhan oui, ils sont le type de chaîne de valeurs, mais quand je les convertir en décimal je reçois le message d'erreur de la chaîne d'entrée n'était pas dans le bon format
  • pouvez-vous coller ici que la valeur de chaîne est..? de sorte que nous pouvons voir
  • Je vais aller sur une branche et dire qu'ils ne sont pas réellement des valeurs décimales... =)
  • j'ai édité le post original
  • sont ceux "\" étant passé..? vous avez besoin de supprimer les caractères de retour si c'est le cas.. vous ne pouvez pas convertir un retour char + "\43.445\" en nombre décimal ..et bien sûr, ce sera un échec ..essayer avec de la ficelle.replace() sur chaque chaîne ou de faire une Vérification sur la chaîne si elle contient "\" utiliser des chaînes de caractères.Replace() else Convertir la Chaîne en un nombre Décimal
  • Ce n'est pas un "\", c'est un guillemet. Le \ est un caractère d'échappement.
  • Daniel, je ne peux pas dire en regardant cette petite capture d'écran..
  • Les valeurs sont entourés par des guillemets ("), c'est pourquoi vous obtenez le message d'erreur avec decimal.Parse()
  • tnx pour me pointer dans la bonne dir
  • tnx tout le monde de prendre le temps..

InformationsquelleAutor John x | 2012-08-20