2010-04-21 57 views
0

MS SQL Server的貨幣數據類型似乎接受格式良好的貨幣值沒有問題(例如:$ 52,334.50)從我的研究MS SQL Sever只是忽略$,個字符。 ASP .NET有一個參數對象,該對象具有Type/DbType屬性,而Currency是一個可設置爲值的選項。但是,當我將參數TypeDbType設置爲貨幣時,它不會接受像$ 52,334.50這樣的值。我收到一個錯誤ASP .NET:SQL Server貨幣類型和.NET貨幣類型

輸入字符串的不正確的格式。

當我嘗試更新/插入。如果我不包括$,字符,它似乎工作正常。另外,如果我沒有指定參數TypeDbType,它似乎也可以正常工作。這只是標準的行爲,其類型設置爲貨幣的參數對象仍然會拒絕在ASP .NET中的$,字符?

這裏的參數聲明的例子(在.aspx頁面):

<asp:Parameter Name="ImplementCost" DbType="Currency" /> 

所以這裏是一個小的更多信息: 我上面提供的代碼片段是更新參數部分的更新命令聲明爲SqlDatasSource控件。該參數將更新我的數據庫中某個表的列(金錢類型)。我的數據庫中的列綁定到一個控件DetailsView控件

回答

0

看看Parse上的覆蓋 - 其中一個接受格式類型參數,其中一個有效值是貨幣。

+0

不知道這是否會在我的特定情況下工作。在OnInserting事件發生之前應用程序崩潰... – 2010-04-21 19:15:39

0

兩個問題。 (1:.NET ASP層)和(2:在服務器上的SQL Server)

在ASP方面,你正試圖把一個字符串中的貨幣/ decimal類型。

嘗試將字符串$ 123.45轉換爲十進制類型,然後轉換爲聲明。或者給它一個字符串(帶有檢查),或者一個字符串123.45M(M文字),因爲...

在SQL端,美元符號是一個字面意思是貨幣數據類型,帶有固定的4位小數。所以可以放棄它,但SQL不會忽略它。它實際上是用它來投射價值。

這就是爲什麼我從來沒有做你在做什麼。你剛剛發現了真正發生的事情。 IIS配置文件和默認值會影響爲什麼使用逗號和具有小數的德語標記的dolars全部解釋正確。但在兩種語言配置文件下,123.45和123,45並不意味着同樣的事情。同樣在SQL方面也會發生類似的情況,例如當字面美元符號被傳入sql時。因此,您可能需要清理該值並在屏幕上爲用戶正確輸入值,然後將十進制值傳遞給SQL,而無需在SQL層進行格式化,以便這不是隱藏的問題。我個人通常會傳遞一個字符串並在客戶端進行合理驗證後,在服務器上對其進行修復和驗證。