LINQ to SQL之增删改查

本文通过一个ASP.NET工程实例介绍如何使用LINQ to SQL进行数据库操作,包括增删改查等基本功能,展示了如何将传统的数据库操作转化为面向对象的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 LINQ to SQL类实际上是对象化数据库对象,使得我们对数据库的操作转变为面向传统面向对象的操作。它完成了对数据库的映射,集成了很多属性和方法,我们只需要用面向对象的思路去使用这些属性和方法就能够很好地与数据库进行交互。同时,这样做也节省了我们在开发频繁地对数据库进行交互的程序时的时间和工作量。

下面以一个LINQtoSQLDemo工程为例,对Products数据进行简单的增删改查,实例化说明。

1、新建一个asp.net工程,命名为LINQtoSQLDemo。在页面上增加四个button控件,一个GridView控件,四个TextBox控件,一个Lable控件。

2、新建一个LINQ to SQL 类,命名为LINQtoSQL.,在设计器面板上把数据库中的Products表直接用鼠标拖拽到面板上。这个类有三个文件:LINQtoSQL.dbml,LINQtoSQL.dbml.layout,LINQtoSQL.designer.cs。producst数据库表有四个字段:pId(主键),ProductId(商品id),ProductName(商品名字),ProductSupplierId(商品供应者Id)。

3、为四个button控件添加事件响应处理。分别处理查询,修改,插入,删除操作。页面代码如下:

 LINQtoSQLDataContext pdc; //声明LINQ to SQL类对象,这是与数据库交互的桥梁,就是上面所说的与数据库相对应的对象

protected IQueryable<Products> GetQuery(decimal pId)  //定制一个查询方法,返回产品id大于指定id的对象集
    {
        pdc = new LINQtoSQLDataContext();
        var query = from product in pdc.Products
                    where product.pId > pId
                    select product;
        return query;
    }

protected void btnSelect_Click(object sender, EventArgs e) //查找
    {
        int id = 0;
        if (TextBox1.Text.Length == 0)
        {
            this.TextBox1.Text = "请输入整数!";
            this.TextBox1.Focus();
        }
        else
        {
            id = Convert.ToInt32(TextBox1.Text);
            var query = GetQuery(id);
            if (query.Count() > 0)
            {
                GridView_Show.DataSource = query;
                GridView_Show.DataBind();
                lblInfo.Text = "查询id号大于" + id + "的记录成功";
            }
            else
            {
                lblInfo.Text = "不存在满足条件的记录";
            }
        }
       
    }
    protected void btnUpdate_Click(object sender, EventArgs e) //更新
    {
        try
        {
            int id = 0;
            if (this.TextBox2.Text.Length == 0)
            {
                this.TextBox2.Text = "请输入数字!将增大productId字段";
                this.TextBox2.Focus();
            }
            else
            {
                id = Convert.ToInt32(TextBox2.Text);
                foreach (Products prod in GetQuery(1))
                {
                    prod.ProductId += (int)id;
                }
                pdc.SubmitChanges();
                GridView_Show.DataSource = GetQuery(0);
                GridView_Show.DataBind();
                lblInfo.Text = "把ProductId增加了" + id;
            }
        }
        catch
        {
            lblInfo.Text = "执行失败!";
        }
    }
    protected void btnInsert_Click(object sender, EventArgs e) //插入
    {
          pdc = new LINQtoSQLDataContext();
          Products newproduct = new Products();
        //int id = Convert.ToInt32(TextBox3.Text);
        //newproduct.pId = id; 不能给主键赋值,赋值无效
        newproduct.ProductId = 1;
        newproduct.ProductName = "橙子";
        newproduct.ProductSupplierId = 1;
        pdc.Products.InsertOnSubmit(newproduct); //插入一条记录
        pdc.SubmitChanges();
        GridView_Show.DataSource = GetQuery(0);
        GridView_Show.DataBind();
        lblInfo.Text = "插入一条记录成功!";
    }
    protected void btnDelete_Click(object sender, EventArgs e) //删除
    {
        pdc = new LINQtoSQLDataContext();
        int id = Convert.ToInt32(this.TextBox4.Text);
        IEnumerable<Products> query = from product in pdc.Products  //查询数据库中满足条件的数据集
                                      where product.ProductSupplierId == id
                                      select product;
        pdc.Products.DeleteAllOnSubmit(query); //一次删除一批记录
        pdc.SubmitChanges(); //提交与正式执行更改申请


        //Single()和SingleOrDefault()都只返回一条记录,前者在没有记录的情况下会抛出一个InvalidOperationnException的异常,
        //后者只是简单地返回一个默认值
        //Products pro = pdc.Products.SingleOrDefault(t => t.pId == id);
        //pdc.Products.DeleteOnSubmit(pro); //一次只能删除一条记录
        //lblInfo.Text = "删除id号为" + id + "的记录成功!";
       
        //重新绑定到GridView_Show中
        GridView_Show.DataSource = from product in pdc.Products
                                   select product;
        GridView_Show.DataBind();
    }

 

补充说明:

1、上面的增删改查操作只是实例性的,是在学习过程中进行的简单实验,所以没进行一些详细特殊情况的处理,如操作失败等之类的。

2、在使用拓展方法IEnumerable<T>时,要引用System.Collections.Generic命名空间,否组会出现:非泛型 类型“System.Collections.IEnumerable”不能与类型参数一起使用”的错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值