僅當我在SQL中包含c.item_cost
時,從Oracle數據庫中提取的此SqlDataSource會引發「指定的強制轉換無效」。如果我刪除此列,則不會出現錯誤。如果我真的在代碼中引用該字段並不重要。SqlDataSource在從Oracle提取的數據上拋出「指定的強制轉換無效」錯誤
<asp:SqlDataSource ID="mySqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>" ProviderName="Oracle.ManagedDataAccess.Client"
SelectCommand="select msi.segment1 partnumber,
msi.description,
msi.primary_uom_code uom,
c.item_cost
from apps.cst_item_costs c, apps.mtl_system_items_b msi, APPS.ORG_ORGANIZATION_DEFINITIONS org
and msi.organization_id=org.ORGANIZATION_ID
and c.organization_id=org.ORGANIZATION_ID
and c.cost_type_id=1
and ((msi.inventory_item_id=c.inventory_item_id)
and (msi.organization_id=c.organization_id))
order by msi.segment1">
另外,如果我加入SQL修剪的行數下降到一個小數目,不是拋出的錯誤。我猜這是導致問題的列中的一些數據。
SqlDataSource是否對數據類型做出了一些假設?
即使我可以精確定位數據,這似乎都是有效的小數,如何避免這個錯誤?
如果需要更多信息,請讓我知道。我目前正在試圖找出導致這種情況的數據,但一些似乎是有效的小數,儘管有些數字更多。 SQL可以成功運行諸如TOAD之類的數據庫工具。
更新:c.item_cost
中的值是15.032221226116,它比其他數據的小數位數多得多。
可能的類型從Oracle到.NET翻譯你真的需要所有價格的精確度? ROUND(c.item_cost,6)是否會拋出錯誤? – kevinsky
@kevinsky它的工作原理。同時,我可以ROUND(c.item_cost,12),它仍然有效。不是我能夠繞多遠,但你讓我感動。寫下來,我會接受。 –