国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺談LINQ to ACCESS簡(jiǎn)單實(shí)現(xiàn)

開發(fā) 后端
為了節(jié)省服務(wù)器,網(wǎng)站的訪問量也不算太大,一直想用ACCESS數(shù)據(jù)庫(kù),但苦于LINQ不支持ACCESS,在網(wǎng)上找了很多的方法,但覺的都不是太完美。在看了LINQ to ACCESS的源碼后,才發(fā)現(xiàn),linq to sql 可以用于ACCESS數(shù)據(jù)庫(kù)。

在LINQ to SQL里面都是用的DbConnection,而不是SQLConnection,這樣的話理論上可以支持所有的數(shù)據(jù),但對(duì)于一些數(shù)據(jù)庫(kù)的支持可能不是太好。例如分頁(yè),SQL Server 2000,SQL Server 2005,SQL Server 2008數(shù)據(jù),使用LINQ的代碼都不一樣,而ACCESS和SQL Server 2000比較接近,就可以直接使用SQL Server 2000Provider。查了一些資料看到,理論有那個(gè)數(shù)據(jù)庫(kù)provider,就可以支持這種數(shù)據(jù)庫(kù)。也看了dbLINQ 0.8支持不同數(shù)據(jù)庫(kù)的源碼,但自己能力有限不能寫一個(gè)ACCESS的,還是用官方的吧。下邊說一下方法。

其實(shí)他不太麻煩,只是改一下,*.designer.cs文件里的代碼。因?yàn)锳CCESS 不支持dbo,而LINQ to SQL里數(shù)據(jù)表前面都有dbo.的前綴, [Table(Name="dbo.wjk3")],將dbo.去掉,不然的話,會(huì)提示你找不到dbo數(shù)據(jù)庫(kù),這點(diǎn)上,自己走了不少?gòu)澛贰T趐ublic partial class DDataContext: System.Data.LINQ.DataContext上邊加上, [Provider(typeof(System.Data.LINQ.SQLClient.SQL Server 2000Provider))]設(shè)定為SQL Server 2000Provider,不然的話 LINQ 里面的first 不能使用,另外分頁(yè)也不能使用,因?yàn)樗J(rèn)的是SQL Server 2008Provider。

這一點(diǎn)很重要,到現(xiàn)在為止,基本上解決LINQ to ACCESS的使用,但還有一點(diǎn)問題,從數(shù)據(jù)庫(kù)讀取一條記錄,修改后使用SubmitChanges()更新,提示錯(cuò)誤,不能修改,錯(cuò)誤內(nèi)容:找不到行或行已更改。這一點(diǎn)可以使用一些自定義方法來實(shí)現(xiàn)更新,使用ExecuteCommand()直接執(zhí)行更新SQL語句來實(shí)現(xiàn)。感覺LINQ to SQL的跟蹤,如果不適用SubmitChanges()更新的話,跟蹤也每太大的意義,實(shí)現(xiàn)跟蹤可能會(huì)降低系能,另外添加,刪除也依賴跟蹤,如果不使用跟蹤的話,還要擴(kuò)展添加,刪除的方法。

  1. public partial class dbgame  
  2.     {  
  3.         public IQueryable<TEntity> Find<TEntity>(TEntity obj) where TEntity : class  
  4.         {  
  5.             //獲得所有property的信息  
  6.             PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);  
  7.             //構(gòu)造初始的query  
  8.             IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity>();  
  9.             //遍歷每個(gè)property  
  10.             foreach (PropertyInfo p in properties)  
  11.             {  
  12.                 if (p != null)  
  13.                 {  
  14.                     Type t = p.PropertyType;  
  15.                     //加入object,Binary,和XDocument, 支持sql_variant,imager 和xml等的影射。  
  16.                     if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])  
  17.                       || t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)  
  18.                       || t == typeof(System.Data.Linq.Binary))  
  19.                     {  
  20.                         //如果不為null才算做條件  
  21.                         if (p.GetValue(obj, null) != null)  
  22.                         {  
  23.                             if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute), true)[0])).IsPrimaryKey && Convert.ToInt32(p.GetValue(obj, null)) == 0)  
  24.                             {  
  25.                             }  
  26.                             else  
  27.                             {  
  28.                                 ParameterExpression param = Expression.Parameter(typeof(TEntity),"c");  
  29.                                 Expression right = Expression.Constant(p.GetValue(obj, null));  
  30.                                 Expression left = Expression.Property(param, p.Name);  
  31.                                 Expression filter = Expression.Equal(left, right);  
  32.                                 Expression<Func<TEntity, bool>> pred = Expression.Lambda<Func<TEntity, bool>>(filter, param);  
  33.                                 queryquery = query.Where(pred);  
  34.                             }  
  35.                         }  
  36.                     }  
  37.                 }  
  38.             }  
  39.             return query;  
  40.         }  
  41.         public void Update<TEntity>(TEntity obj) where TEntity : class  
  42.         {  
  43.             string str = "update  " + typeof(TEntity).Name + " set ";  
  44.             string cols = "";  
  45.             string where="";  
  46.             //獲得所有property的信息  
  47.             PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);  
  48.             //構(gòu)造初始的query  
  49.  
  50.             IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity>();  
  51.             //遍歷每個(gè)property  
  52.             foreach (PropertyInfo p in properties)  
  53.             {  
  54.                 if (p != null)  
  55.                 {  
  56.                     Type t = p.PropertyType;  
  57.                     //加入object,Binary,和XDocument, 支持sql_variant,imager 和xml等的影射。  
  58.                     if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])  
  59.                       || t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)  
  60.                       || t == typeof(System.Data.Linq.Binary))  
  61.                     {  
  62.                         //如果不為null才算做條件  
  63.  
  64.                         if (p.GetValue(obj, null) != null)  
  65.                         {  
  66.                             if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute), true)[0])).IsPrimaryKey)  
  67.                             {  
  68.                                 where +=" where "+p.Name+"="+p.GetValue(obj,null);  
  69.                             }  
  70.                             else  
  71.                             {  
  72.                                  
  73.                                 if (t == typeof(System.Byte[]) || t == typeof(System.Int32) || t == typeof(Double) || t == typeof(float))  
  74.                                     cols += p.Name + "=" + p.GetValue(obj, null) + ",";  
  75.                                 else  
  76.                                     cols += p.Name + "='" + p.GetValue(obj, null) + "',";  
  77.                             }  
  78.                         }  
  79.                     }  
  80.                 }  
  81.             }  
  82.  
  83.             str += cols.Substring(0,cols.Length-1) +where;  
  84.             HttpContext.Current.Response.Write("<br>"+str+"<br>");  
  85.              this.ExecuteCommand(str);  
  86.             
  87.         }  
  88.         public void Insert<TEntity>(TEntity obj) where TEntity : class  
  89.         {  
  90.             string str = "insert into [" + typeof(TEntity).Name + "] (";  
  91.             string cols = "";  
  92.             string vals = "";  
  93.             string where = "";  
  94.             //獲得所有property的信息  
  95.             PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);  
  96.             //構(gòu)造初始的query  
  97.  
  98.             IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity>();  
  99.             //遍歷每個(gè)property  
  100.             foreach (PropertyInfo p in properties)  
  101.             {  
  102.                 if (p != null)  
  103.                 {  
  104.                     Type t = p.PropertyType;  
  105.                     //加入object,Binary,和XDocument, 支持sql_variant,imager 和xml等的影射。  
  106.                     if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])  
  107.                       || t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)  
  108.                       || t == typeof(System.Data.Linq.Binary))  
  109.                     {  
  110.                         //如果不為null才算做條件  
  111.  
  112.                         if (p.GetValue(obj, null) != null)  
  113.                         {  
  114.                             //if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute), true)[0])).IsPrimaryKey && Convert.ToInt32(p.GetValue(obj,null))==0)  
  115.                             //{  
  116.                                   
  117.                             //}  
  118.                             //else  
  119.                             //{  
  120.                                 cols += "["+p.Name + "],";  
  121.                                 if (t == typeof(System.Byte[]) || t == typeof(System.Int32) || t == typeof(Double) || t == typeof(float))  
  122.                                     vals += p.GetValue(obj, null) + ",";  
  123.                                 else  
  124.                                     vals +="'"+ p.GetValue(obj, null) + "',";  
  125.                            // }  
  126.                         }  
  127.                     }  
  128.                 }  
  129.             }  
  130.  
  131.             str += cols.Substring(0, cols.Length - 1) + ") values (" + vals.Substring(0, vals.Length - 1) + ")";  
  132.             HttpContext.Current.Response.Write("<br>" + str + "<br>");  
  133.             this.ExecuteCommand(str);  
  134.  
  135.         }  
  136.         public void Delete<TEntity>(TEntity obj) where TEntity : class  
  137.         {  
  138.             string str = "delete from [" + typeof(TEntity).Name+"] where ";  
  139.             string cols = "";  
  140.             string where = "";  
  141.             //獲得所有property的信息  
  142.             PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);  
  143.             //構(gòu)造初始的query  
  144.  
  145.             IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity>();  
  146.             //遍歷每個(gè)property  
  147.             foreach (PropertyInfo p in properties)  
  148.             {  
  149.                 if (p != null)  
  150.                 {  
  151.                     Type t = p.PropertyType;  
  152.                     //加入object,Binary,和XDocument, 支持sql_variant,imager 和xml等的影射。  
  153.                     if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])  
  154.                       || t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)  
  155.                       || t == typeof(System.Data.Linq.Binary))  
  156.                     {  
  157.                         //如果不為null才算做條件  
  158.  
  159.                         if (p.GetValue(obj, null) != null)  
  160.                         {  
  161.                             if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute), true)[0])).IsPrimaryKey && Convert.ToInt32(p.GetValue(obj, null)) == 0)  
  162.                             {  
  163.  
  164.                              }  
  165.                             else  
  166.                             {  
  167.                                 if (t == typeof(System.Byte[]) || t == typeof(System.Int32) || t == typeof(Double) || t == typeof(float))  
  168.                                     where +="["+p.Name+"]" + "=" + p.GetValue(obj, null) + " and ";  
  169.                                 else  
  170.                                     where += "[" + p.Name + "]" + "='" + p.GetValue(obj, null) + "' and ";  
  171.                             }  
  172.                         }  
  173.                     }  
  174.                 }  
  175.             }  
  176.  
  177.             str +=where.Substring(0,where.Length-5);  
  178.             HttpContext.Current.Response.Write("<br>" + str + "<br>");  
  179.             this.ExecuteCommand(str);  
  180.  
  181.         }  
  182.         public IQueryable<TEntity> FindKey<TEntity>(object value) where TEntity : class  
  183.         {  
  184.             //獲得所有property的信息  
  185.             PropertyInfo[] properties = typeof(TEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance);  
  186.             //構(gòu)造初始的query  
  187.             IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity>();  
  188.             //遍歷每個(gè)property  
  189.             foreach (PropertyInfo p in properties)  
  190.             {  
  191.                 if (p != null)  
  192.                 {  
  193.                     Type t = p.PropertyType;  
  194.                     //加入object,Binary,和XDocument, 支持sql_variant,imager 和xml等的影射。  
  195.                     if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])  
  196.                       || t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)  
  197.                       || t == typeof(System.Data.Linq.Binary))  
  198.                     {  
  199.                         //如果不為null才算做條件  
  200.                         if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute), true)[0])).IsPrimaryKey)  
  201.                         {  
  202.                             ParameterExpression param = Expression.Parameter(typeof(TEntity), "d");  
  203.                             Expression right = Expression.Constant(value);  
  204.                             Expression left = Expression.Property(param, p.Name);  
  205.                             Expression filter = Expression.Equal(left, right);  
  206.  
  207.                             Expression<Func<TEntity, bool>> pred = Expression.Lambda<Func<TEntity, bool>>(filter, param);  
  208.  
  209.                             queryquery = query.Where(pred);  
  210.                            break;  
  211.                         }  
  212.                     }  
  213.                 }  
  214.             }  
  215.             return query;  
  216.         }  
  217.     } 

沒有解決的問題:

怎樣能解決更新的時(shí)候能直接使用SubmitChanges();

【編輯推薦】

  1. 使用LINQ查詢泛型字典Dictionary
  2. 淺析Linq to SQL更新數(shù)據(jù)時(shí)容易忽略的問題
  3. 淺談LINQ to SQL集成數(shù)據(jù)庫(kù)語言優(yōu)劣
  4. LINQ橫向?qū)Ρ萬oreach方法
  5. 淺談LINQ如何插入刪除和更新數(shù)據(jù)庫(kù)記錄備注
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2009-09-08 10:03:13

Linq查詢Acces

2009-09-08 16:55:01

Linq實(shí)現(xiàn)XML轉(zhuǎn)換

2009-09-15 16:31:15

LINQ Custom

2009-09-15 15:18:40

Linq連接查詢

2009-09-17 09:24:57

Linq實(shí)現(xiàn)分頁(yè)

2009-09-09 15:44:22

Linq DataCo

2009-09-15 11:34:47

Linq多條件查詢

2009-09-14 09:49:08

Linq擴(kuò)展函數(shù)

2009-09-07 17:32:14

LINQ檢索數(shù)據(jù)

2009-09-16 11:15:52

Linq聯(lián)接數(shù)據(jù)

2009-09-08 15:19:52

Linq Where操

2009-09-10 15:45:07

Linq使用Selec

2009-09-10 11:29:00

LINQ to SQL

2009-09-11 11:25:35

LINQ函數(shù)集合

2009-09-17 10:40:23

linq存儲(chǔ)過程

2009-09-17 09:57:08

linq創(chuàng)建數(shù)據(jù)庫(kù)

2009-09-14 13:30:04

Linq數(shù)據(jù)和對(duì)象

2009-09-09 11:07:52

LINQ to SQL

2009-09-18 16:32:51

Linq委托實(shí)例化

2009-09-15 11:08:01

LinQ調(diào)用存儲(chǔ)過程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

8x海外华人永久免费日韩内陆视频| 在线精品视频视频中文字幕| 国产成人在线视频| 日本三级免费观看| 一本久久综合| 在线观看亚洲视频| 国产宾馆自拍| 好吊日精品视频| 在线观看欧美黄色| 欧美激情精品久久久久久久变态| 欧美连裤袜在线视频| 成人在线电影在线观看视频| 亚洲成av人乱码色午夜| 97影院理论| 先锋a资源在线看亚洲| 这里只有精品99re| 在线免费观看av网站| 国产精品自拍三区| 国产精国产精品| 91九色美女在线视频| 91丨porny丨中文| 久久国产乱子伦免费精品| 国产一区二区三区美女| 国产精品偷伦视频免费观看国产| 18视频免费网址在线观看| 日韩在线一二三区| 国产精品视频一区二区三区四区五区| 日韩一级大片| 国产z一区二区三区| 国产精品亚洲成在人线| 欧美精品色综合| 国产精品久久久久三级| 嫩草影院网站在线| 欧美国产一区二区| 亚洲国产欧洲综合997久久| 欧美激情视频一区二区三区免费| 精品视频一区在线视频| 黄网站app在线观看下载视频大全官网 | 97视频在线| 国产在线精品一区二区不卡了| 北条麻妃高清一区| 国产91露脸合集magnet| 黄色片免费在线观看视频| 首页综合国产亚洲丝袜| 亚洲专区在线视频| 国产影视一区| www成人免费| 精久久久久久久久久久| www.国产亚洲| 香蕉久久夜色精品| 欧美久久久久久| 蜜桃av噜噜一区| 裸体裸乳免费看| 国产成人在线视频网址| 久久久久久www| 国产精品的网站| gogo高清免费视频| 亚洲一区二区三区四区在线| 大地资源高清播放在线观看| 欧美精品videosex极品1| 日av在线播放中文不卡| 免费在线观看视频| 亚洲一区欧美一区| 国产九色porn网址| 欧美日韩综合在线免费观看| 一级特黄视频| 欧美理论片在线| 女人天堂av在线播放| 精品蜜桃在线看| 亚洲精品aa| 国产乱肥老妇国产一区二| 91精品日本| 国产精品三级网站| 亚洲摸摸操操av| 精品无人乱码一区二区三区 | 国产精品久久国产精品99gif| 91精品二区| gogo人体高清视频| 国产精品美女久久久久av福利| 亚洲人精品午夜| 日韩三级影视| 99re在线观看视频| 男人操女人的视频在线观看欧美| 青青免费在线视频| 日韩视频在线观看免费| 国产精品一二| 午夜在线a亚洲v天堂网2018| 久久香蕉视频网站| 亚洲精品免费在线| 成人日批视频| 国产精品久久久久久久久久久久久久| 国产一区美女在线| jizzjizzjizz亚洲女| 欧美日韩第一视频| 欧美国产1区2区| 奇米影视777在线欧美电影观看 | 精品91久久久久| 懂色av一区| 日韩一级片播放| 日韩欧美国产综合在线一区二区三区 | 国产精品91一区二区三区| 9i精品一二三区| 伊人久久大香线蕉av一区| 欧美性受xxxx黑人xyx| 日本精品视频| 四虎影院在线播放| 成年人三级视频| 欧美最猛性xxxxx免费| 久久无码av三级| 99久久.com| 最新av电影| 国产精品视频一区二区三区四| 久久精品日产第一区二区三区高清版 | 免费成人在线视频网站| 国产精品播放| 国产精品美女在线| 色久欧美在线视频观看| 91精品久久久久久久99蜜桃| 一区二区三区精品久久久| 91蝌蚪porny| 粉嫩绯色av一区二区在线观看| 国产乱码精品| 在线综合色站| 日韩加勒比系列| 日本国产在线播放| 人禽交欧美网站免费| 国产精品色悠悠| 不卡av电影院| 亚洲国产日韩欧美综合久久| 亚洲成人免费视| www.日韩精品| 精品中文字幕一区二区小辣椒| 天天做天天爱天天综合网2021 | 国产一区二区久久精品| 色噜噜狠狠色综合欧洲selulu| 国产精品第一页第二页第三页| 2017欧美狠狠色| 国产不卡高清在线观看视频| 日韩高清欧美激情| 亚洲一区一卡| 国产日韩一区二区三区在线| 欧美色图首页| 精品福利电影| 香蕉久久夜色精品国产| 麻豆精品在线观看| 精品69视频一区二区三区| 亚洲第一狼人区| 久青草国产97香蕉在线视频| 高清不卡在线观看| 麻豆国产精品| 1024欧美极品| 国产精品毛片一区视频| 欧美国产在线观看| japanese国产精品| 免费大片黄在线观看视频网站| 天天干天天操天天玩| 国产色视频一区| 伊人av综合网| 国产亚洲欧美一区| 欧美精品videossex88| 久久人人爽人人爽人人片亚洲| 欧美精品www在线观看| 九九精品在线视频| 91精品国产91久久久久久最新 | 狠狠色丁香久久综合频道| 一区二区三区国产在线| 国产精品免费看| 精品一区二区三区免费视频| 精彩视频一区二区| 国产精品天美传媒沈樵| 日本韩国欧美在线| 欧美一区二区高清| 精品女同一区二区| 欧美日韩国产成人高清视频| 91精品国产91久久久久久不卡| 肥熟一91porny丨九色丨| 国产乱子伦农村叉叉叉| 最新亚洲伊人网| 免费av在线网站| 成人欧美在线| 国产成人免费视频网站视频社区| 大桥未久在线视频| 精品国产一区二区三区久久久樱花| 亚洲精品免费观看| 久久久一区二区| 日韩精品综合一本久道在线视频| 国产大片精品免费永久看nba| 日韩福利在线| 久草在线新视觉| 国产成人精品123区免费视频| 亚洲精品激情| 中文字幕一区二区三区四区不卡 | 综合亚洲自拍| 国产精品综合视频| 亚洲免费在线看| 亚洲精品国产精品国自产在线 | 久久婷婷五月综合色丁香| 日日摸夜夜添夜夜添精品视频 | 亚洲三级 欧美三级| 精品乱色一区二区中文字幕|