【问题标题】:LINQ select from SQL Server CE: Specified Cast is not valid从 SQL Server CE 中选择 LINQ:指定的转换无效
【发布时间】:2011-11-09 12:44:07
【问题描述】:

好的,首先,大家好,这是我的第一篇文章。

现在,我已经创建了一个 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 创建表查询复制到另一个程序中,并让它计算我有多少次 int、float 等。计数符合预期。然后我用 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 数据库和我的映射中都声明为浮点数可能是什么问题

【问题讨论】:

    标签: c# .net linq-to-sql exception-handling sql-server-ce


    【解决方案1】:

    看起来你的类和表之间的映射有一个属性映射到一个类型不兼容的数据库字段,例如您有一个映射到 nvarchar db 字段的 int 属性。

    【讨论】:

    • hhhhhhmmmmmm 这会很烦人,我正在查看的表只有 100 多列。
    【解决方案2】:

    tbRawData 是如何声明的?可能其中一个字段定义与数据库中的字段不匹配。

    【讨论】:

    • 用数据填充实际数据库时会不会出错?即如果映射错误,我尝试将 String 放入 Int 字段
    • 您是使用相同的数据类填充数据库还是使用不同的工具填充数据库?
    • 同理。数据来自 csv 文件。作为测试,我刚刚从 csv 文件中删除了除第一行/行之外的所有数据。然后,我擦除了 SQLCE 数据库中的所有数据,并只用那一行重新填充了它。现在,当我运行我的代码时,我没有遇到问题。我猜这个问题更多地与填充数据库有关。
    • 似乎其中一个字段是您的数据类不期望的值。您使用从 csv 导入的数据插入了数据,不是吗?因此,您的数据类与表中的数据之间仍然可能存在不匹配。将数据类中声明的字段与数据库中的字段进行比较。
    • 我收回了。关闭程序,重新运行我的代码,问题又回来了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多