2011-11-09 51 views
1

確定首先,嗨,每一個這是我的第一篇文章。LINQ從SQL Server CE中選擇:指定的演員表無效

現在,我已經創建了一個SQLCE數據庫,創建了數據上下文和所有映射,併成功地用數據加載填充了數據庫。到目前爲止很好,現在如果我想檢索數據,我會遇到問題。

代碼獲取數據

var codes = (from c in App.BonusDatabase.tbRawData 
      select c).ToList(); 

運行,我獲得指定的轉換無效。我猜測它有一個不喜歡的價值,我怎麼才能找到它的價值?

at System.Data.SqlServerCe.SqlCeDataReader.GetFloat(Int32 ordinal) 
at Read_RAW(ObjectMaterializer`1) 
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
at BAT.Bonus.BonusRun(Int32 Week) in Bonus.cs:line 36 
at BAT.Bonus.BonusRun() in Bonus.cs:line 25 
at BAT.winMain.worker_DoWork(Object sender, DoWorkEventArgs e) in winMain.xaml.cs:line 91 
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) 
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) 

編輯:好一個騙子我複製的SQL創建表的查詢到另一個程序,並得到它算多少次,我有整型,浮點等不出所料計數。然後我用LINQ映射重複了這一點,它有一個匹配的計數,所以我不認爲映射是錯誤的。

編輯2: 我只是修改了上面的代碼只選擇1場,而不是一切都像這樣

var codes = (from c in App.BonusDatabase.tbRawData 
     select c.CODE).ToList(); 

這工作正常,但如果我然後換另一場

var codes = (from c in App.BonusDatabase.tbRawData 
     select c.PPH).ToList(); 

我得到錯誤。那麼這就是那個玩的?如果是這樣,問題可能是SQL數據庫和我的映射中聲明爲float的問題

回答

1

看起來您的類和表之間的映射具有映射到不兼容類型的數據庫字段的屬性。你有一個int屬性映射到一個nvarchar db字段。

+0

hhhhhhmmmmmm這將是惱人的尋找,我看着有超過100列的表。 – Gazlar

1

tbRawData是如何聲明的?也許其中一個字段定義與數據庫中的字段不匹配。

+0

用數據填充實際數據庫時,我沒有發生錯誤嗎?即如果它被映射錯了,我試圖把字符串放入Int字段 – Gazlar

+0

您是用相同的數據類填充數據庫,還是用不同的工具填充它? – Fischermaen

+0

同樣。數據來自csv文件。作爲一個測試,我只是從csv文件中除第一行/第一行以外的所有數據。然後,我擦除了SQLCE數據庫中的所有數據,並將其填充到一行中。現在,當我運行我的代碼時,我沒有遇到任何問題。我猜這個問題更多的是填充數據庫。 – Gazlar