zoukankan      html  css  js  c++  java
  • linq 初步认识

    linq to sql 类

    介绍:

    linq如果不能用的话 重装一下vs就好了

    LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

    是一种高集成化的数据库访问技术。

    他与ado.net区别就是 ado.net是最基础的  linq是最高级的;

    实用linq  不会用数据库,sql语句不会写也可以访问数据库;

    改变的是数据访问层;

    实用:

    先做一个table  共7列,再放一个Repeater循环绑定

                                                                           

    准备工作完成后,在解决方案里新建项,找到linq to sql     文件格式是.dbml

    命名使默认名不懂,想要操作那个数据库就把数据库名写在前面。

    创建时提示这个类必须放在名为app_code的文件夹里,确认自动添加;

    创建完成来到这个界面,点击这个资源管理器,

                

    左边会出现一个窗口,点击带+号的那个按钮

                                                       

    然后会在弹出一个窗口,填写数据库信息,选择的时候就会发现只能选择一个库。如果用户名和密码填写错误是连不上数据库的

                                                       

    连接之后何在数据库里是一样的列表。创建实体类只需要把你需要的那个表拖到空白区域就可以了。他还会显示出表之间的外键关系

       建好的类就是这样,实体类在.cs里面,这里面的东西不要改,没有情况会让你改这里面的内容。

      在里面找到了成员变量,这里有个partial 代表这是类的一部分,所以可以属性拓展;

    接下来创建数据访问类:

    创建一个类,类名与表明一致;

    在类里面输入linq的名称,实例化出来;

    这个东西叫做  数据库上下文;

    写一个方法

    这样就完成了对数据库users表的所有数据查询, 通过数据库上下文con找到users表 转换成list格式,放到ulist里面,在return出去。

    更简单的也可以直接在后台里面这样写:

     

    using是编写一个作用域,小括号后面创建一个对象,是一种很好用的对象销毁的方式。

    这里创建的对象con只能在花括号里面用,走完花括号就会销毁掉。

    数据拓展

     属性拓展不能写在linq的.cs文件里,因为只要linq类稍微有一点变化,哪怕是表移动了一点,他就会刷新数据。

    这里的类型是bool?型,还有其他?型,他和bool型区别就是一个可以为null一个不可以;

    实用的时候必须吧?型装换成普通类型;

     所以属性拓展要再建一个类,类名必须与表明一制。记得加上partial , 里面再写属性拓展就可以了。要return的属性通过下划线可以点出来。

    如果是有外键关系的表可以直接点出来。

    添加数据

    准备几个textbox和一个按钮

    后台  按钮的点击事件

    添加数据当然还是用数据库上下文,

    添加数据要用这两句,第一句con.Users.InsertOnSubmit(u) 是一个添加数据方法,括号内添加一个users类型的数据,但只是准备添加,第二句con.SubmitChanges();才是完成修改。添加数据。

    删除数据

    删除需要新建一个web,后台接收一下传递过来的ids。

    根据这个ids查询出对应的对象,删除这个对象;

    然后弹出一个提示,告诉用户删除了没。

    返回页面;

    这里就需要ambda表达式;

    Users u =  con.Users.where( r => r.ids.Tostring() == 接收的id ).FirstOrDefault();

    这就是基本格式,r可以换成任意字母, =>就是基本格式  r点 就可以出现每一列的名,然后判断(转换格式);

    查询出来是个集合  取值用.FirstOrDelault() 第一条或者[不存在,不执行,为空]

    if(u != null)

    {

    con.Users.DeleteOnSubmit(u);绑定需要删除的对象

    con.SubmitChanges();修改

    }

    修改数据

    using (UsersDataClassesDataContext con = new UsersDataClassesDataContext())
            {
    
                Users u = con.Users.Where(r => r.Ids.ToString() == st).FirstOrDefault();
    
                if (u != null)
                {
                    if (p1.Text.Length > 0)
                        u.Password = p1.Text;
    
                    u.Nickname = TextBox2.Text;
                    u.Sex = RadioButtonList1.Items[0].Selected;
                    u.Birthday = Convert.ToDateTime(Text_Bir.Text);
                    u.Nation = Dr4.SelectedValue;
    
    
                    con.SubmitChanges();
    
    
                    Response.Write("<script>alert('修改成功!')</script>");
                    Response.Redirect("zhanshi.aspx");
                    
                }
    
            }
    

     

    - con.SubmitChanges();

            各修改数据准备过程就是准备修改过程,不用再用上下文对象来准备。直接一把提交

     再重复一下

    使用Linq时要注意:
    1.创建Linq连接后生成的dbml文件不要变动,生成的表不要碰,拖动表也会造成数据库连接发生变动,需要重新保存.
    2.属性拓展的使用:添加一个新的类,不要在dbml中添加属性拓展,一旦数据库变动,属性拓展类就会失效.
    3.使用Linq获取的数据都是?int,?string等?数据类型,意思是也有可能为空,这时候操作数据需要先把数据类型转化成int,string等数据类型.

    在这里操作数据库用到了lambda表达式,是一种匿名函数,使用lambda表达式自动带有防攻击,不需要在使用parameter了.

  • 相关阅读:
    TF.VARIABLE和TENSOR的区别(转)
    同步与异步,阻塞与非阻塞的区别
    tensorflow op tf.global_variables_initializer
    iOS viewDidUnload方法
    Objective-C中的@property和@synthesize用法
    UIDatePicker的时间选择器里的时区的问题
    IOS 小技巧积累
    IOS atomic与nonatomic,assign,copy与retain的定义和区别
    XCODE4.6从零开始添加视图
    Xcode无法设置视图的 autosizing control原因
  • 原文地址:https://www.cnblogs.com/big-lll/p/6936709.html
Copyright © 2011-2022 走看看