4

次のコードを使用して、SQLServerテーブルにcsvをインポートしています

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

ExecuteNonQueryここで、パラメーター3と4は、次の例外が発生したときにコードを実行すると、DDLのdecimal(9,6)タイプになります。

パラメータ値を文字列から小数に変換できませんでした。

問題のtnxを見つけるのを手伝ってください。

編集

crntRecord[3]の値は次のようになります

ここに画像の説明を入力してください

4

4 に答える 4

3

それが文字列の配列であると仮定するとcrntRecord、最初に文字列を小数に解析する必要があります。

元:

nonqueryCommand.Parameters["@num3"].Value = decimal.Parse(crntRecord[3].ToString());

crntRecord[3]が小数に解析できない場合、これは例外をスローすることに注意してください。それが発生する可能性のある状況である場合は、decimal.TryParse()代わりに調べてください。

于 2012-08-20T18:03:47.060 に答える
3

より安全な解析方法を使用するように編集

文字列には、削除する必要のある周囲の引用符があります。試す

decimal num3;
bool isDecimal = decimal.TryParse(crntRecord[3].Trim(new []{'\"'}), out num3);
if(isDecimal)
    nonqueryCommand.Parameters["@num3"].Value = num3;

すべての小数にこのメソッドを使用することをお勧めします。つまり、このロジックを再利用可能な関数に入れると、上昇リファクタリングになります。

于 2012-08-20T18:31:53.793 に答える
1

で試してみてください

nonqueryCommand.Parameters["@num1"].Value = Convert.ToDecimal(crntRecord[0]));
nonqueryCommand.Parameters["@num2"].Value = Convert.ToDecimal(crntRecord[1]);
nonqueryCommand.Parameters["@num3"].Value =Convert.ToDecimal(crntRecord[3]);
nonqueryCommand.Parameters["@num4"].Value = Convert.ToDecimal(crntRecord[4]);
于 2012-08-20T18:03:18.753 に答える
-1

使用する

nonqueryCommand.Parameters.AddWithValue("@num1", crntRecord[0]);
于 2012-08-20T18:04:10.640 に答える