ASP.NET网站开发-数据上下文

本文详细介绍了DataContext的概念及使用方法,包括如何创建自定义的数据上下文类、使用DataContext类的各种属性(如Connection、Transaction和CommandTimeout),以及如何运用DataContext类的方法(如CreateDatabase、DeleteDatabase和ExecuteCommand等)来操作数据库。

 DataContext又称为数据上下文,它为LINQ to SQL提供操作数据库的入口。如果要使用LINQ to SQL操作数据库,首先需要为该数据库创建一个继承自DataContext类的自定义的数据上下类,并在该类中定义表,以及操作数据的方法等。

DataContext类的属性
  • 连接属性Connection
          Connection属性可以获取DataContext类的实例的连接(类型为DbConnection)。
  • 事务属性Transaction      
    Transaction属性为DataContext类的实例设置访问数据库的事务。
其中,LINQ to SQL支持以下3种事务:
  1.  显示事务。如果DataContext类的实例显式设置了Transaction属性的值。那么DataContext类的实例调用SubmitChanges()方法是将在同一个事物上进行。
  2. 隐式事务。当DataContext类的实例调动SubmitChanges()方法时,LINQ to SQL会检查是否在已经指定的事务内,如果不是,则LINQ to SQL将启动本地事务,并将此事务执行所生成的SQL命令。
  3.  显式可分发事务。DataContext类的实例可以在Transaction属性指定的事务内调用LINQ to SQL API,而不会创建新的事务。
  •  执行命令的最大时间属性CommandTimeout
      CommandTimeout属性可以设置或获取DataContext类的实例的查询数据库操作的超时期限。
该时间的单位为秒,默认值为30秒。可根据查询数据库的操作增大该属性的值,来保证查询数据库的操作能够完成。
DataContext类的方法 
             

 DataContext类包括多个方法,如创建数据库的CreateDatabase()方法、检测数据库是否存在的DatabaseExistsO方法、删除数据库的DeleteDatabaseO方法、执行SQL命令的ExecuteCommandO方法、执行SQL査询的ExecuteQueryO方法等。

  • 执行SQL命令的ExecuteCommand()方法
 ExecuteCommand())方法能够执行指定的SQL语句,并通过该SQL语句来操作数据库。
        具体步骤如下:
                (1)创建LinqDBDataContext类的实例db。
                (2)创建被执行的SQL语句。
                (3)调用ExecuteCommandO方法执行上述指定的SQL语句。
                (4)显示ExecuteCommandO方法执行的结果,即被修改记录的数量。

[plain]  view plain  copy
  1. ///<summaiy>  
  2. ///执行SQL命令的ExecuteCommand()方法  
  3. ///〈/summary〉  
  4.   
  5. private void ExecuteCommandWithParam()  
  6. {  
  7.   //创建LinqDB数据库上下文的实例  
  8. LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);  
  9.   //创建SQL语句  
  10. string sql = "UPDATE Userlnfo SET Username = {0} WHEREID > 90";  
  11.   //执行SQL语句,并返回SQL语句影响的行数  
  12. int result = db.ExecuteCommand(sql,"New Name");  
  13.   //显示执行的结果  
  14. Response.Write(result.ToString()+"条数据被修改!");  

        执行结果为:12条数据被修改!

  • 执行SQL查询的ExecuteQuery()方法

             ExecuteQuery()方法可以执行指定的SQL查询语句,并通过SQL查询语句检索数据,查询结果保存数据类型为IEnumerable或IEnumerable<Tresult>的对象。

      具体步骤如下:               

                (1)创建LinqDBDataContext类的实例db。

                (2)创建被执行的SQL查询语句。
                (3)调用ExecuteQuery()方法执行上述指定的SQL查询语句查询结果保存在result变量中。其中,查询结果中的元素的数据类型为UserInfo。
                (4)使用foreach语句显示result变量中的信息。

[plain]  view plain  copy
  1. ///<summary>  
  2. ///执行SQL査询的ExecuteQuery()方法  
  3. ///</summary>  
  4.   
  5. private void ExecuteSqlQuery()  
  6. {  
  7.     //创建LinqDB数据库上下文的实例  
  8.     LinqDBDataContext db = new LinqDBDataContext(  
  9.     LinqSystem.LinqDBConnectionString);  
  10.     //创建SQL语句  
  11.     string sql = "SELECT TOP 5 * FROM UserInfo";  
  12.   
  13.     IEnumerable<UserInfo>users = db.ExecuteQuery<UserInfo>(sql);  
  14.   
  15.     //显示查询的结果  
  16.     foreach(Userlnfo u in users)  
  17.     {  
  18.         Response.Write("用户名称:"+u.Username+"<br/>;  
  19.     }  
  20. }  
执行结果为:
[plain]  view plain  copy
  1. 用户名称为:admin  
  2. 用户名称为:dorient  
  3. 用户名称为:user1  
  4. 用户名称为:user2  
  5. 用户名称为:user3  
  • 提交更改到数据库的SubmitChanges()方法
      SubmitChanges()方法能够计算要插入、更新或删除的己修改对象的集,并执行相应的修改提交到数据库,并修改数据库。
  •  获取表集合的GetTable()方法
             GetTable()方法能够获取DataContext类的实例的表的集合。
  •  获取已修改对象的GetChangeSet()方法
             GetChangeSet()方法能够获取被修改的对象,它返回由3个只读集合(InsertsDeletesUpdates)组成的对象。

  1. Deletes属性,已从ChangeSet中删除的实体。
  2. Inserts属性,己插入到Changeset中的实体。
  3. Updates属性,己在ChangeSet中更新的实体。




基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux) 或 (windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的时间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值