none
使用 ADO.NET 实体框架查询的时候发生 内部异常 SQL Server Compact RRS feed

  • 问题

  • 最近写个WPF程序, 其中用到了 SQL Server Compact  还缓存 数据,
    同时用 ADO.NET 实体框架 访问, 但是 奇怪地方出现了

    如果在执行的查询中包含条件,比如

     Dim context = New HashDatabaseEntities

     Dim fh = context.FileSet.FirstOrDefault(Function(x) (x.Path = filename))


    这样便会出错, 错误是
    "在 WHERE、HAVING、GROUP BY、ON 或 IN 子句中不能使用 ntext 和 image 数据类型,除非将这些数据类型与 LIKE 或 IS NULL 谓词一起使用。"

    还有提示说是内部错误

    但如果直接使用

    Dim filesets = context.FileSet.ToList

    反而还没有错误,
    谁知道怎么解决?谢谢


    G yc {Son of VB.NET}
    2009年7月20日 7:43

答案

  • 用两个查询,先选择主键,再根据主键的值选择记录。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月20日 16:09
    版主

全部回复

  • 用两个查询,先选择主键,再根据主键的值选择记录。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月20日 16:09
    版主
  • 分开查询吗?

    结果也一样错误, 如果第一个不用ToList的话, 就会异常。
    很奇怪

    但我现在把这个SDF数据库复制出来放到另一个新建工程中, 反而 没有问题了, 想不明白。
    不知道自己哪里用错


    G yc {Son of VB.NET}
    2009年7月21日 0:48
  • 你的edmx和数据库同步么?

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月27日 12:55
    版主
  • 不是,  独立的

    我就是想保存一下  已经Hash 过的文件 的Hash值, 所以选了这个。

    但用完上实体框架就出问题了

    今天又看了一下, 发现

    如果查询中 context.FileSet.FirstOrDefault(Function(x) (x.Path = “c:\test.jpg"))
    这样就不会有问题, 但如果改成了

    dim filename="c:\test.jpg"
    context.FileSet.FirstOrDefault(Function(x) (x.Path = filename ))

    也会出错, 很郁闷

    表的结构是
    Id Guid
    HashValue nvarchar(4000)
    Path   nvarchar(4000)



    G yc {Son of VB.NET}
    2009年7月27日 13:02
  • 看看生成的SQL 有什么不同
    nvarchar(4000)用作搜索条件?再加一个MD5hash,比较之前用MD5先过滤一道吧。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月27日 13:13
    版主
  • 生成的SQL 看起来很正常。
    但运行起来就问题。

    恩, 我想做的是 通过 Path 找到  Hash

    SQL Server 好像还可以通过程序监控,知道运行状态, 但 Compart 就没有这个功能了,郁闷~


    G yc {Son of VB.NET}
    2009年7月27日 13:17
  • 今天又 看了一下, 还是不行, 用实体框架就是有问题,  但如果换到 SQL Server 就没有问题。

    记得当初看到 说 SQL Server Compact   是支持 LINQ  to SQL  的,今天看了一下
    原来给用命令才有效, IDE本身没有支持。
    用了这个,没有问题, 有点想不明白了~

    PS. 用Expression Encoder3 的桌面录制一段视频。 但这里似乎 无法嵌入,
    地址是
    http://silverlight.services.live.com/invoke/43503/SQLCompartLINQQuestion/iframe.html

     http://msbluelight-0.agappdom.net/e1/d/43503/22327299.4/63384508800/0.BG1wM3jcGAw8eJ1My_XpLCUad7E/zziframehtml2zz.html#%2fStartWithParent%2fappId%2f%2f%2f%2f%2f%2f%2f%2ftrue%2f3.0%2f1%2fbootstrapper.js


    用Hyper-V 做的虚机, 系统是 Win7 X64 RC 中文版 ,内存 2G , 硬盘 60G ×2
    VS 2010 (VS 2008 也有问题,应该不像是IDE问题)
    虚机的桌面分辨率是 1152 ×864

    没有声音,没字幕
    大致说一下。

    首先是数据库,展示一下结构 (00:00~00:45)

    接下来是跑实体框架的演示

    在路径字符串在搜索条件里面的时候, 没有问题  (00:45~01:24)
    但换成变量后,就出错了(01:25~02:26)

    之后的就是 用 Linq to SQL 类做的演示(02:26~3:52)
    结果跑了2遍 ,没有异常

    PS.2 .  视频使用 SL3 HOST的,可以下载到本地。
    G yc {Son of VB.NET}
    • 已编辑 G yc 2009年7月28日 9:43
    2009年7月28日 9:42