9

みなさん、良い一日を、

今のところ、このエラーで立ち往生しています

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; }
    }

アイテムの重量12345.12を入力すると正常に機能するため、エラーはアイテムの重量にあると思いますが、1234.00として処理する代わりに1234を入力すると、数値にするだけで1234として処理します..

助けはありますか?変換が間違っているかどうかわかりません

ところで、データベースの私のフィールドは

fld_ItemWeight (decimal (38,6), not null

EDIT** Decimal で既知のバグはありますか?? 現在VS 2005を使用しています。

4

7 に答える 7

14

見つけた答え!ストアド プロシージャが間違っています。ストアド プロシージャに decimal(9,6) があり、3 桁以下を受け入れるようになっています。(18,2) に変更しました\

于 2013-09-24T03:12:05.713 に答える
6

元の投稿者は彼の解決策を見つけましたが、他の人の利益のために、私はそれを引き起こした原因を投稿しようと思いました.

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

悲しいことに、メッセージには、問題が発生しているパラメーターが示されていません。そのため、通過していたすべてのパラメーターを値 0 に変更しました (これは、ほとんどの SQL タイプに適した値であり、他の値を使用する必要がある場合があります)。これにより、エラーがなくなりました。その後、それらを1つずつ通常に戻すことができ、そのたびに再テストしました. それが、どのパラメータに問題があるかを突き止めた方法です。

パラメータの 1 つで、コードに含まれていた(C# の 10 進数) が大きすぎて、decimal(7,2) ストアド プロシージャ パラメータに入れることができませんでした。

于 2016-09-16T11:56:35.840 に答える
-1

プロシージャを呼び出していて、10 進数データ型のパラメータがある場合は、分数でのみ渡すことができます。詳細については、データ型を数値から 10 進数に変換する際のエラーを参照してください。

于 2013-09-23T09:46:28.047 に答える