LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

本文详细介绍了如何使用LINQ to SQL在Visual Studio 2010中进行数据库操作,包括添加、修改和删除数据的步骤及生成的SQL语句。通过实践演示,展示了LINQ to SQL简化了数据库操作过程,无需深入学习SQL知识。

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

第一篇       从CUD开始,如何使用LINQ  to SQL插入、修改、删除数据 

准备工作,现在数据库中建好测试表Student,这个表只有三个字段ID,Name,Hometown,其中ID为int类型的自增长字段,Name和Howmtown是nvarchar类型

1. 打开VS2010新建控制台应用程序,然后添加LINQ to SQL Class,命名为DbApp.dbml,新建dbml文件之后,可以打开server explorer,建立数据库连接,并将我们新建的表拖到dbml文件中,结果如下图

 

2. 可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间

 

3. 到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践

1) 添加 Add

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void Add()
{
    //添加一个Student
    Student aStudent = new Student
    {
        Name = "张小二",
        Hometown = "南海观音院"
    };
    Console.WriteLine("----------begin Add a student");
    using (DbAppDataContext db = new DbAppDataContext())
    {
        db.Log = Console.Out;
        db.Students.InsertOnSubmit(aStudent);
        db.SubmitChanges();
    }
 
    Console.WriteLine("----------End Add a student");
}

输出的sql语句 

1
2
3
4
5
6
7
INSERT INTO [dbo].[Student]([Name], [Hometown])
VALUES (@p0, @p1)
 
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小二]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海观音院]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

2) 使用linq to sql执行Edit 编辑操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private static void Edit(int id)
{
    Console.WriteLine("----------begin edit");
    using (DbAppDataContext db = new DbAppDataContext())
    {
        db.Log = Console.Out;
 
    //取出student
    var editStudent = db.Students.SingleOrDefault<Student>(s=>s.ID == id);
 
    if (editStudent == null)
    {
        Console.WriteLine("id错误");
        return;
    }
 
    //修改student的属性
    editStudent.Name = "张小三";
    editStudent.Hometown = "张家口张家寨张家营";
 
    //执行更新操作
    db.SubmitChanges();
 
    }
    Console.WriteLine("---------end edit Student");
}

输出的sql语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]
FROM [dbo].[Student] AS [t0]
WHERE [t0].[ID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
 
UPDATE [dbo].[Student]
SET [Name] = @p3, [Hometown] = @p4
WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown] = @p2)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小二]
-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海观音院]
-- @p3: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小三]
-- @p4: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张家口张家寨张家营]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

3)使用linq to sql 执行删除操作

执行代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Delete(int id)
{
    Console.WriteLine("-----------begin delete a student");
    using (DbAppDataContext db = new DbAppDataContext())
    {
        db.Log = Console.Out;
        //取出student
        var student = db.Students.SingleOrDefault<Student>(s => s.ID == id);
 
        if (student == null)
        {
            Console.WriteLine("student is null");
            return;
        }
 
        db.Students.DeleteOnSubmit(student);
 
        db.SubmitChanges();
    }
    Console.WriteLine("------------end Delete student");
}

生成的sql语句:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]
FROM [dbo].[Student] AS [t0]
WHERE [t0].[ID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
 
DELETE FROM [dbo].[Student] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown
] = @p2)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小三]
-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张家口张家寨张家营]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

总结:通过以上实践可以看到使用linq to sql执行增改删操作,非常方便,我们甚至不需要学习任何sql相关的知识。

 我有两点疑惑,请各位指点:

1.  是否是在执行update和delete时必须先获得实体,然后才能执行操作,我尝试在update时,不去数据库中获取实体,而是自己声明一个实体,然后去删除,但是失败了

2.  在生成的update和delete的条件语句中包含name=@p和hometown=@p的语句,按理说link to sql已经知道id是唯一的主键,为什么还会传这些没有的条件进去的

转载于:https://www.cnblogs.com/hbsfgl/p/4936515.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值