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”不能与类型参数一起使用”的错误。
LINQ to SQL之增删改查
最新推荐文章于 2023-05-03 18:45:57 发布