When updating or inserting a number type, currency type and date/datetime type field, there is an boolean attribute needs to be set other than just setting the value of the number type, currency type and date/datetime type field.
clientForUpdate.Usage_Balance__c = Convert.ToDouble(txtBalance.Text.ToString());
clientForUpdate.Usage_Balance__cSpecified = true ;
Related posts:
http://community.salesforce.com/t5/NET-Development/Why-is-my-date-number-boolean-being-ignored-for-create-and/m-p/4708
Reason and solution:
根本原因是因为.NET2.0下,不管你有没有赋值,如果不设置"xxxxSpecified"为true,.NET都会自动赋默认值,所以要specified,提醒.NET不要用默认值而用我们赋的值。
This doesn't apply to the Partner WSDL, only the enterprise WSDL. In the Partner WSDL you have direct control over the element in the request, via the Any property on the sObject.
http://www.pocketsoap.com/weblog/2004/07/1461.html