Fehler beim konvertieren der parameter-Wert aus einer Zeichenfolge in ein Dezimal -

Im Import einer csv zu meinem sql server-Tabelle mit dem folgenden code

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();

wo die parameter 3 und 4 sind vom Typ decimal(9,6), die in der DDL, wenn ich den code auszuführen bei ExecuteNonQuery bekomme ich die folgende exception

Failed to convert parameter-Wert aus einer Zeichenfolge in eine Dezimalzahl.

bitte helfen Sie mir, herauszufinden, das problem tnx.

BEARBEITEN

den Wert in der crntRecord[3] sieht aus wie

Fehler beim konvertieren der parameter-Wert aus einer Zeichenfolge in ein Dezimal -

  • Was sind die genauen Werte, die "crntRecord" array enthält?
  • Weiß nicht, welche Art crntRecord ist. Wenn es ein DataRow, crntRecord[0] wäre der Typ object was sehr wahrscheinlich sein könnte string.
  • Könnten Sie ein Beispiel, was die Werte in der crntRecord array sind?
  • Sie haben gedebuggt, Ihr Programm und überprüft die Werte der crntRecord auf die Indizes 0, 1, 3, und 4? Ich würde vermuten, dass mindestens einer der nicht-numerischen.
  • Ich wage zu vermuten, dass der zurückgegebene Typ von crntRecord[3] und crntRecord[4] sind String. Sie können dies bestätigen, indem Sie hinzufügen: string test = crntRecord[3] und zu prüfen, wenn es kompiliert.
  • Singh Chouhan ja, Sie sind der string-Typ Werte aber wenn ich konvertieren Sie Sie in Dezimalformat ich bekomme die Fehlermeldung " die Eingabezeichenfolge hat das richtige format
  • können Sie hier einfügen, was der string-Wert ist..? so dass wir sehen können
  • Ich werde gehen auf ein Glied und sagen, dass Sie eigentlich nicht dezimale Werte... =)
  • ich habe editiert, der ursprüngliche Beitrag
  • sind die "\" übergeben wird..? Sie brauchen, um Streifen aus den Zeichen zurück, wenn dies der Fall ist.. Sie können nicht konvertieren eine Rückkehr char + "\43.445\" in eine Dezimalzahl ..natürlich wird es scheitern ..versuchen Sie es mit string.replace() auf jeder saite, oder Schauen Sie auf die Zeichenfolge, wenn es mit "\" String verwenden.Ersetzen() else Konvertieren Sie die Zeichenfolge in eine Dezimalzahl
  • Es ist nicht ein "\", es ist ein Anführungszeichen. Das \ ist ein escape-Zeichen.
  • Daniel ich kann nicht sagen, Blick auf diese kleine Screenshot..
  • Die Werte sind umgeben von doppelten Anführungszeichen ("), das ist, warum Sie die Fehlermeldung mit decimal.Parse()
  • tnx für den Hinweis mich in die richtige dir
  • tnx an alle für die Zeit nehmen..

InformationsquelleAutor John x | 2012-08-20
Schreibe einen Kommentar