2009-06-03 39 views
0

我正在構建數據加載器實用程序應用程序(Win 7 64bit,VS 2008,C#,.Net 3.5,Win Forms )使用Subsonic 2.2。
我已經得到了所有使用SqlServer的工作,現在我需要讓它在Sqlite 3中工作。我已經解決了一些問題,但有一個我無法解決;
我有2列,緯度和經度是FLOAT數據類型在sqlite和亞音速生成爲空可浮動。代碼生成是好的,建設很好,但是當我嘗試運行應用程序時,當對象被保存時,我得到錯誤,「不能保存:經度超過了最大長度8」。
我的猜測是這是Subsonic中的驗證問題,因爲我的Sqlite數據庫現在已經加載了我已經加載到這些列中的數據。
任何亞音速或Sqlite老兵都有任何建議,我是Subsonic的新成員,現在只用Sqlite工作了6個月。Subsonic + Sqlite + Float數據類型==「不能保存:xxx超過最大長度8」

感謝, 傑夫

,導致該錯誤的值是-122.41082這是超過8個字符,但我不認爲這是在sqlite的一個浮動的上限。當涉及到數據類型時,我可能選擇不好?

+0

你可以幫我一個忙,爲我做一個Math.Round()來得到小數位嗎? – 2009-06-04 00:11:43

回答

2

這是一個SQLite的問題,因爲,從我的理解,SQLite沒有「類型」的概念 - 只值推論:

http://www.sqlite.org/faq.html#q3 How to ALTER sqlite column (iPhone)?

我猜這裏是,推斷得到的浮動迷失東京 - 如果你讀了文檔,它說之多:

與NUMERIC關聯的列可以 包含使用所有五個存儲值類。當將文本數據 插入NUMERIC列時,嘗試將 轉換爲整數或 實數,然後將其存儲。如果 轉換成功(意味着 轉換髮生而沒有 信息丟失),那麼使用INTEGER或REAL 存儲類存儲值 。如果轉換 離不開的 信息,則該值是使用TEXT存儲類

所以看起來你傳遞的價值是不是能夠存儲 損失進行存儲爲REAL(用於某些原因),並試圖對TEXT進行調整,限制長度爲8.這也是有意義的,因爲它計算小數位 - 它不應該(只有在它是文本時)。

有一個在這裏閱讀: http://www.sqlite.org/datatype3.html#affinity

它看起來這是你處理這個問題。總而言之,SQLite是一個「ducktyped」數據庫,很多人都被它咬了。所以,總之,我認爲你的答案可能是使用Math.Round(3)將8個總數+小數(和負數符號)中的值合起來,這樣它就可以被強制到列中。

相關問題