zoukankan      html  css  js  c++  java
  • linq to access 简单实现

          为了节省服务器,网站的访问量也不算太大,一直想用access数据库,但苦于linq 不支持access,在网上找了很多的方法,但觉的都不是太完美。在看了linq to sql的源码后,才发现,linq to sql 可以用于 access数据库。因为在linq to sql里面都是用的DbConnection,而不是SqlConnection,这样的话理论上可以支持所有的数据,但对于一些数据库的支持可能不是太好。例如分页,sql2000,sql2005,sql2008数据,使用linq的代码都不一样,而access和sql2000比较接近,就可以直接使用Sql2000Provider。查了一些资料看到,理论有那个数据库provider,就可以支持这种数据库。也看了dblinq 0.8支持不同数据库的源码,但自己能力有限不能写一个access的,还是用官方的吧。下边说一下方法。其实他不太麻烦,只是改一下,*.designer.cs文件里的代码。因为access 不支持dbo,而linq to sql里数据表前面都有dbo.的前缀, [Table(Name="dbo.wjk3")],将dbo.去掉,不然的话,会提示你找不到dbo数据库,这点上,自己走了不少弯路。在public partial class DDataContext: System.Data.Linq.DataContext上边加上, [Provider(typeof(System.Data.Linq.SqlClient.Sql2000Provider))]设定为Sql2000Provider,不然的话 linq 里面的first 不能使用,另外分页也不能使用,因为他默认的是Sql2008Provider。这一点很重要,到现在为止,基本上解决linq to access的使用,但还有一点问题,从数据库读取一条记录,修改后使用SubmitChanges()更新,提示错误,不能修改,错误内容:找不到行或行已更改。 这一点可以使用一些自定义方法来实现更新,使用ExecuteCommand()直接执行更新sql语句来实现。感觉linq to sql的跟踪,如果不适用SubmitChanges()更新的话,跟踪也每太大的意义,实现跟踪可能会降低系能,另外添加,删除也依赖跟踪,如果不使用跟踪的话,还要扩展添加,删除的方法。

     

    [System.Data.Linq.Mapping.DatabaseAttribute(Name="game1")]
        [Provider(
    typeof(System.Data.Linq.SqlClient.Sql2000Provider))]
        
    public partial class dbgame : System.Data.Linq.DataContext

    System.Data.Linq.DataContext的扩展的方法:sql to sql 类的名称dbgame

    Code

    没有解决的问题:

    怎样能解决更新的时候能直接使用SubmitChanges();

     

     
    ------------------------------------------------------------------------------------
    作者:王继坤

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    ------------------------------------------------------------------------------------
  • 相关阅读:
    React简明学习
    react-router简明学习
    react组件生命周期
    在vue中使用css modules替代scroped
    深入理解javascript中的事件循环event-loop
    javascript中的内存管理和垃圾回收
    移动端中的陀螺仪
    基于create-react-app的再配置
    vscode常用设置
    更高效地使用搜索引擎
  • 原文地址:https://www.cnblogs.com/wangjikun3/p/linqoaccess.html
Copyright © 2011-2022 走看看