2011-11-09 54 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