2013-09-23 10 views
5

グッドデイ誰も、今、このエラーで立ち往生イムのようエラーの変換データ型 '数値' 小数へ(ヘルプ!)

Error Converting data type 'Numeric' to Decimal 

これは私のコードです

AddManualItems AddReconItem = new AddManualItems(); 
     UserAccess user = new UserAccess(); 
     AddReconItem.BranchCode = BranchCodeTextBox.Text; 
     AddReconItem.ForLoanMonth = YearDropDownList.SelectedValue + "/" + MonthDropDownList.SelectedValue; 
     AddReconItem.ItemWeight = Convert.ToDecimal(WeightTextBox.Text);  
     AddReconItem.PrincipalAmount = Convert.ToDecimal(PrincipalTexAmTextBox.Text); 
     AddReconItem.PawnTicket = PwnTicketTextBox.Text; 
     AddReconItem.ItemStorageGroup = Convert.ToInt16(StorageNameDropDownList.SelectedValue); 
     AddReconItem.ReconID = Convert.ToInt16(ReconTypeDropDownList.SelectedValue); 
     user.UserID = Session["UserID"].ToString(); 

     string a = servs.AddItemRecon(user, AddReconItem); // this is where the error appears in debug mode 

ADDitemRecon(User、AddReconItem)内のコードはこれです

using (SqlConnection reportsConn = new SqlConnection(sqlConnWriter)) 
      { 
       reportsConn.Open(); 
       SqlCommand AddReconItem = new SqlCommand(); 
       AddReconItem.Connection = reportsConn; 
       AddReconItem.CommandType = CommandType.StoredProcedure; 
       AddReconItem.CommandText = "Updater.usp_AddReconcileItems"; 
       AddReconItem.Parameters.AddWithValue("@ITEMWEIGHT", Convert.ToDecimal(items.ItemWeight)); 
       AddReconItem.Parameters.AddWithValue("@ITEMPRINCIPALAMT", Convert.ToDecimal(items.PrincipalAmount)); 
       AddReconItem.Parameters.AddWithValue("@FORLOANMONTH", Convert.ToDateTime(items.ForLoanMonth)); 
       AddReconItem.Parameters.AddWithValue("@STORAGEGROUPID", items.ItemStorageGroup); 
       AddReconItem.Parameters.AddWithValue("@BRANCHCODE", items.BranchCode); 
       AddReconItem.Parameters.AddWithValue("RECONID", items.ReconID); 
       AddReconItem.Parameters.AddWithValue("@PAWNTIX",items.PawnTicket); 
       AddReconItem.Parameters.AddWithValue("@CREATEDBY", user.UserID.ToString()); 
       AddReconItem.ExecuteNonQuery(); 
      } 

ItemWeightのための私の財産は

private decimal itemWeight; 

    public decimal ItemWeight 
    { 
     get { return itemWeight; } 
     set { itemWeight = value; } 
    } 

iはエラーがアイテムの重量である賭けるあるので、ときに私の項目重量の入力 12345.12それは、正常に動作しますが、私は、入力1234の代わりの1234.00と、それを処理するときに扱いますそれは数字だけにする1234として。

助け?私の変換が間違っている場合、私は** は10進数で知られているいずれかのバグがあり、データベース内の私のフィールドは

fld_ItemWeight (decimal (38,6), not null 

EDITですちなみに

を知りません?私は現在VS 2005を使用しています。

答えて

8

のための別の方法を試してみてください

は答えを見つけました!私のストアドプロシージャは間違っています私は3桁以下を受け入れるように私のストアドプロシージャの小数点(9,6)を持っています!(18,2)\

に変更しました
-1

プロシージャを呼び出しているときに10進データ型のパラメータがある場合は、分数でしか渡すことができません。詳細については、Error converting data type numeric to decimalを参照してください。

+1

ado.net終わりSqlDbType.Decimalを取るarticledあなたに基づいて進(38,6)私はこれを持って、これによりエラーが発生しないことを前提としていますが、分数は(2,2)同じ精度と同じ数の小数点以下の宣言を持つ人にのみ適用されます。 – user2705620

0

私はこの問題の適切な解決策を知りませんが、私は1つのアイデアがあります。同様

編集

文字列に

decimal xxxyyy = Convert.ToDecimal(WeightTextBox.Text); 

    if(!xxxyyy .ToString().Contains(".00)) 
    { 
     AddReconItem.ItemWeight=xxxyyy.ToString() +".00"; 
    } 
    else 
    { 
    AddReconItem.ItemWeight=xxxyyy.ToString() ; 
    } 
をご ItemWeight財産 DataType小数を変更

:このに使用math.Round()

AddReconItem.ItemWeight = Convert.ToDecimal(WeightTextBox.Text);  
AddReconItem.ItemWeight=Math.Round(AddReconItem.ItemWeight,2); 
+0

は既に試してみましたが、幸運はありません。なぜ私はちょうどそれをデバッグモードで見たのかわかりません – user2705620

+0

112345.00変換されたときに112345が返されます。データベースに渡された値と例外が発生する可能性があります。 – user2705620

+0

@DanzaiVerデータベース列DataType 10進数をnvarcharに変更し、私の解決策を試してください。 –

0

元のポスターは、私のためにそれを引き起こしたものを投稿すると思った。

System.Data.SqlClient.SqlException:数値データ型を10進数に変換中にエラーが発生しました。

悲しいことに、メッセージにはどのパラメータが問題となっているのかわかりません。だから、私が渡していたすべてのパラメータを値0に変更しました。これは、ほとんどのSQL型に適した値です。他の値を使う必要があるかもしれません。私はその後、それらを1つずつ正常に戻すことができ、毎回、私は再テストしました。それで、どのパラメータに問題があったかを調べました。

私のコード(C#の小数点)が大きすぎて小数点(7,2)のストアドプロシージャのパラメータには入りませんでした。

+0

ちょっと思い出してください。(7,2)小数点は7小数点の長さで、小数点以下2桁は小数点以下を意味します。小数点以下は2桁です。 – user2705620

0

セットで値を丸めるようにしてください。

private decimal itemWeight;

public decimal ItemWeight 
{ 
    get { return itemWeight; } 
    set { itemWeight = Math.Round(value,yourPrecisionHere); } 
} 
店舗の手順で同じDECIMAL(18,2)に
0

変更SQL列、および

関連する問題