浅谈LINQ如何插入删除和更新数据库记录备注

开发 后端
使用LINQ TO SQL生成数据库访问层极大地简化了此前数据库访问层的设计,本文将简单讲解LINQ如何插入、删除和更新数据库记录备注。

一、引言

使用LINQ TO SQL生成数据库访问层极大地简化了此前数据库访问层的设计(以前基于SQL SERVER的开发大多是基于SQLHELPER或微软企业级的DAAB吧?)。

但是,LINQ TO SQL不是***的。例如,你在重新修改或设计数据库表格后,原先使用LINQ TO SQL生成的DATACONTEXT类并不会自动更新。因此,针对这些更改之后的操作,需要特别注意。

二、问题描述

[一]

本文中首先记录的是使用LINQ插入数据库记录时涉及的一个基本概念级问题。

请看下面的代码片断:

public  bool InsertUserStatus(string UserName)
    {
        eMailDataContext dt = new eMailDataContext();
        try
        {
            //删除可能存在的原有用户状态信息
           Table3 u = dt.Table3.First(m => m.abc == UserName);
            //if (dt.Table3.Count() != 0)
            //{
            //    Table3 u = dt.Table3.First(m => m.abc  == UserName);
                //if (u != null)
                //{
                    dt.Table3.DeleteOnSubmit(u);
                    dt.SubmitChanges();
                //}
            //}
            //创建新的用户状态信息
            Table3 userstatus = new Table3
            {
                abc = UserName
            };
            //插入到数据库表格UserStatus中
            dt.Table3.InsertOnSubmit(userstatus);

            dt.SubmitChanges();

            return true;
        }
        catch (System.InvalidOperationException)
        {
           return false;//(2)
        }
    }

上述代码的意思是,在表格Table3 中先删除可能存在的符合条件的记录,然后在此表格中再插入一条记录数据。上面的代码将“可能”引发异常,将流程控制转向(2)处。

这些“可能”在于,数据表格Table3 中最初无记录,则必引发异常;如果有记录,则一切符合既定操作要求。

于是,修改上面的代码为如下:

public  bool InsertUserStatus(string UserName)
    {
        eMailDataContext dt = new eMailDataContext();
        try
        {
            //删除可能存在的原有用户状态信息
           if (dt.Table3.Count() != 0)// (1)
            {
                Table3 u = dt.Table3.First(m => m.abc  == UserName);
                if (u != null)
                {
                    dt.Table3.DeleteOnSubmit(u);
                    dt.SubmitChanges();
                }
            }
            //创建新的用户状态信息
            Table3 userstatus = new Table3
            {
                abc = UserName
            };
            //插入到数据库表格UserStatus中
            dt.Table3.InsertOnSubmit(userstatus);
            dt.SubmitChanges();

            return true;
        }
        catch (System.InvalidOperationException)
        {
            return false;
        }
    }

也就是说,删除操作前需要先判定数据表格是否记空--这可以通过红色的if语句((1)处)来实现。

如此以来,无论表格中是否事先存在记录都可以往下执行可能的删除及插入操作了。

[二]

再来看一个例子,例如:

    //删除旧的邮件
    public static void DeleteSubject(string UserName, string host)
    {
        eMailDataContext dt = new eMailDataContext();
string cmdText = "delete from MailDownloadTemp
where UserName=" + "'"+UserName +"'"+ " and Host=" + "'"+host+"'";
        try
        {
            int result = dt.ExecuteCommand(cmdText);
            return;
        }
        catch (System.InvalidOperationException)
        {
            return;
        }
    }

上述操作同样抛出异常。因此,需要同上面提到的那样,先进行数据库表格记录数据判断,再进行可能的删除操作。因此,再修改上面代码,如下所示:

  //删除旧的邮件
    public static void DeleteSubject(string UserName, string host)
    {
        eMailDataContext dt = new eMailDataContext();
        if (dt.MailDownloadTemp.Count() == 0)
            return;
 string cmdText = "delete from MailDownloadTemp
where UserName=" + "'"+UserName +"'"+ " and Host=" + "'"+host+"'";
        try
        {
            int result = dt.ExecuteCommand(cmdText);
            return;
        }
        catch (System.InvalidOperationException)
        {
            return;
        }
    }

这样便OK了。

【编辑推荐】

  1. 使用LINQ和ADO.NET创建Silverlight程序
  2. 手把手教你用好LINQ to SQL
  3. LINQ to SQL实现数据访问通用基类
责任编辑:彭凡 来源: ITPUB
相关推荐

2009-07-07 09:24:37

LINQ检索

2009-09-14 13:30:04

Linq数据和对象

2009-05-14 14:23:25

微软ado.netLINQ

2009-09-14 15:45:28

LINQ删除XML节点

2009-09-14 16:12:57

LINQ删除记录

2009-09-16 11:15:52

Linq联接数据

2009-09-07 17:32:14

LINQ检索数据

2019-08-13 15:52:34

数据库同步迁移

2011-08-04 18:00:47

SQLite数据库批量数据

2009-09-14 10:29:02

LINQ删除记录

2011-04-06 17:35:17

Access数据库空记录

2010-04-13 10:23:40

Oracle数据库

2009-11-04 12:37:32

ADO.NET SQL

2009-09-14 15:37:06

LINQ映射数据库

2009-09-18 13:58:00

LINQ查询数据库

2009-09-18 15:19:19

LINQ to SQL

2023-09-05 08:40:57

删除数据库Oracle

2020-08-31 07:00:00

数据库数据库同步

2009-12-23 10:02:46

ADO数据库

2011-04-13 14:58:16

Oracle数据库删除
点赞
收藏

51CTO技术栈公众号