C#向数据库中插入或更新null空值与延迟加载lazy

插入或更新null空值

一、在SQL语句中直接插入null或空字符串“”

int? item = null;
item == null ?
"null"
 : item.ToString();
item == null ? "" : item.ToString();

二、用命令参数,插入DBNull.Value

int? item = null;
cmd.Parameters.Add(dbPams.MakeInParam(":Item", SqlNull(item)));
cmd.Parameters[0].IsNullable = true;//更新时需加入此句。

static public object SqlNull(object obj)
{
    return (item == null ? DBNull.Value : item)
}

延迟加载

.在.NET4.0中,可以使用Lazy 来实现对象的延迟初始化,从而优化系统的性能。

正如我们所知,对象的加载是需要消耗时间的,特别是对于大对象来说消耗的时间更多.lazy可以实现对象的延迟加载。延时加载,意思是对象在使用的时候创建而不是在实例化的的时候才创建。

Lazy 对象初始化默认是线程安全的,在多线程环境下,第一个访问 Lazy 对象的 Value 属性的线程将初始化 Lazy 对象,以后访问的线程都将使用第一次初始化的数据。

一、延时加载主要应用的场景:

  • 数据层(ADO.NET或Entity Framework等ORM,Java里面的Hibernate也用到了这种技术)
  • 反射(加载assemblier,type,MEF)
  • 缓存对象,领域实体
  • 单例模式

二、简单用法

如下:其中IsValueCreated属相显示其是否被创建。

static void Main(string[] args)
{
 Lazy lazyBig = new Lazy();
 Console.WriteLine("对象是否创建" + lazyBig.IsValueCreated);
 lazyBig.Value.Test();
 Console.WriteLine("对象是否创建" + lazyBig.IsValueCreated);
} 

class Big {
 public Big() { }
 public void Test() {
   Console.WriteLine("Test....");
}
 } //结果如下: //对象是否创建False //Test.... //对象是否创建True

由此可见,根据lazy创建的对象,只有当第一次使用到它时才会初始化.

另,lazy可使用委托来创建。

static void Main(string[] args)
{
    Lazy lazyBig = new Lazy( () => new Big(100) );
    lazyBig.Value.Test();
} 

class Big {
  public Big(int id) { this.ID = id; }
  public int ID { get; set; }
  public void Test()
    {
        Console.WriteLine("ID = " + ID.ToString());
    }
}

到此这篇关于C#向数据库中插入或更新null空值与延迟加载lazy的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈C# 中的可空值类型 null

    C# 不允许把 null 赋给一个值类型的数据.在 C# 中,以下语句是非法的: 复制代码 代码如下: int a = null;    // 非法 但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型.可空值类型在行为上与普通值类型相似,但可以将一个 null 值赋给它.如下所示: 复制代码 代码如下: int? a = null;      // 合法 当把一个变量定义为可空值类型时,该变量依然可以被赋值为 0,代码如下所示: 复制代码 代码如下: usi

  • C#基础 延迟加载介绍与实例

    延迟加载(lazy loading) 设计模式是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据(读取属性值)的时候,才真正执行数据加载操作. 为了便于理解, 我们来建立一个场景, 假设我们要构造一个Hero(英雄) 类, 每个Hero 有自己的名字和(SpecialSkill)特殊技能.建模这是一种建立的方法: 复制代码 代码如下: public class Hero{    public string FullName { get; set; }    public s

  • C#日期控件datetimepicker保存空值的三种方法

    方法一(推荐): 设置datetimepicker的属性ShowCheckBox为true 在窗口初始化时候,添加代码this.datetimepicker1.Checked = false; 保存日期值入库的时候,就可以根据if(this.datetimepicker1.Checked ==false),保存空值. 方法二: 在窗口初始化函数中添加: 复制代码 代码如下: this.dateTimePicker1.Format=DateTimePickerFormat.Custom; this

  • 详解C# Lazy Loading(延迟加载)

    目录 前言 示例 参考: 前言 按需加载对象延迟加载实际是推迟进行创建对象,直到对其调用后才进行创建初始化,延迟(懒加载)的好处是提高系统性能,避免不必要的计算以及不必要的资源浪费. 常规有这些情况: 对象创建成本高且程序可能不会使用它. 例如,假定内存中有具有 Orders 属性的 Customer 对象,该对象包含大量 Order 对象,初始化这些对象需要数据库连接. 如果用户永远不要求显示 Orders 或在计算中使用该数据,则无需使用系统内存或计算周期来创建它. 通过使用 Lazy 来声

  • C#中SQL参数传入空值报错解决方案

    C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. 下面我们看个例子: SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn); cmd.parameters.add("@StuName" ,stuName); cmd.para

  • C#向数据库中插入或更新null空值与延迟加载lazy

    插入或更新null空值 一.在SQL语句中直接插入null或空字符串“” int? item = null; item == null ? "null" : item.ToString(); item == null ? "" : item.ToString(); 二.用命令参数,插入DBNull.Value int? item = null; cmd.Parameters.Add(dbPams.MakeInParam(":Item", SqlN

  • 在MsSql、Access两种数据库中插入记录后马上得到自动编号的ID值

    本编文章将要介绍重点解释如何在Ms Sql Server中更新或添加一条记录后立即得到其标识列的值,这个值在ACCESS就是我们熟知的自动编号的 ID值,好了,闲话不多说,代码我也不多写,只写关键些,相信各位高手一看就明白,呵呵.后面也附带了在ACCESS中获取的方法,虽然在ACCESS 中获取自动编号的文章网上虽然很多,但放在此做为一个总结吧. Set testRs=Server.CreateObject("ADODB.RecordSet") '创建要测试的对象 testRs.Ope

  • 在python中使用pymysql往mysql数据库中插入(insert)数据实例

    咱还是直接看代码吧! from pymysql import * def main(): # 创建connection连接 conn = connect(host='', port=3306, database='', user='', password='', charset='utf8') # 获取cursor对象 cs1 = conn.cursor() # 执行sql语句 query = 'insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) value

  • 向数据库中插入数据并返回当前插入的行数及全局变量@@IDENTITY应用

    数据库中有张表User,字段是ID和Name,ID自增. 利用存储过程实现插入时返回当前的行数 复制代码 代码如下: CREATE PROC Proc_InsertUser @name nvarchar(100) AS INSERT INTO dbo.User( Name )VALUES(@name) SELECT @@IDENTITY AS ID 利用全局变量@@IDENTITY实现. 如果哪里有不正确的地方,欢迎批评指正,共同进步.

  • 解决Go语言数据库中null值的问题

    本文主要介绍如何使用go语言database/sql库从数据库中读取null值的问题,以及如何向数据库中插入null值.本文在这里使用的是sql.NullString, sql.NullInt64, sql.NullFloat64等结构体,为了方便书写,它们的泛指我会使用sql.Null***来表示 要点 从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取:或者使用IFNULL.COALESCE等命令让数据库查询值返回不为""或者NULL 若需要往数据库中插入

  • sql查询语句教程之插入、更新和删除数据实例

    目录 前言 1.插入数据 1.1 为表的所有字段插入数据 1.insert语句中不指定具体的字段名 2.insert语句中列出所有字段 1.2 为表的指定字段插入数据 1.3 同时插入多条记录 1.4 将查询结果插入到表中 2.更新数据 3.删除数据 总结 前言 数据库通过插入.更新和删除等方式来改变表中的记录.插入数据是向表中插入新的记录,通过 INSERT 语句来实现.更新数据是改变表中已经存在的数据,使用UPDATE 语句来实现.删除数据是删除表中不再使用的数据,通过DELETE 语句来实

  • mysql ON DUPLICATE KEY UPDATE重复插入时更新方式

    目录 mysql当插入重复时更新的方法 第一种方法 第二种方法 第三种方法 Mysql on duplicate key update 解决插入重复数据时更新值的问题以及其存在的问题 一.使用 二.存在问题 mysql当插入重复时更新的方法 第一种方法 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (client_id,client_name,client_type) SELECT supplie

  • 在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据

    导言 结束前面的几节,我们已经探讨过了如何使用GridView.DetailsView和FormView控件来显示数据.这些控件简单地操作提供给它的数据.一般地,这些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据.我们已经看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的角色.当一个GridView需要显示数据时,它调用ObjectDataSource的Select()方法,这个方法转而调用一个来自我们的业务逻辑层(BLL)

  • 在ASP.NET 2.0中操作数据之十七:研究插入、更新和删除的关联事件

    导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑或删除特征时,在用户添加一条新记录或更新/删除一条现在记录的过程中发生了多个步骤.正如我们之前一节里所讨论的,在GridView中编辑一行时,保存(Update)和取消(Cancel)按钮将取代编辑(Edit)按钮,并且绑定列转换成TextBox.在用户更新了数据并点击保存按钮之后,下述步骤在回传时执行: 1.该GridView控件根据当前编辑行的唯一标识字段(通过DataKeyNames属性)组装它的Ob

  • asp.net中ADO SQL数据库 笔记汇总 持续更新中

    ADO连接数据库 1)获取连接字符串 方式一: 记住连接字符串 connectionString=" Integrated Security=True; server=. ; database=DBName" 方式二:在visual studio中,点击"视图"à服务资源管理器à右击左侧的"数据连接",选择"添加连接"à服务名: 为一个点.选择数据库名,然后点击"高级",然后复制底部的连接字符串 2)在we

随机推荐