我的KT库之----数据库的操作(DbCommandExecutor)

简介:

了解或者认识KT:

http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html

 

在项目中如何使用KT?

KT是一个库,所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。

本节将介绍大家如何使用KT库操作数据库。KT里的数据库操作对象存放于在“KT.Framework.Database“下,当你已在你的项目里引用了KT库后,则写下以下代码就可以使用了。

using KT.Framework.Database;

数据库命令执行对象: DbCommandExecutor

DbCommandExecutor里封装了常用的数据执行命令。通过DbConnection或DbHelper实例化一个实例,如下面

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb");
DbCommandExecutor executor = new DbCommandExecutor(connection);

或者

DbHelper db = new DbHelper(connection);
DbCommandExecutor executor = new DbCommandExecutor(db);

但建议的是直接调用DbHelper里的Executor属性直接获取对应的DbCommandHelper实例,如下面范例

DbHelper db = new DbHelper(connection);
DbCommandExecutor executor = db.Executor;

 

DbCommandExecutor的方法

注:以下的演示代码使用的表结构如下,表名:user

id int 标识字段
name nvarchar(20) 姓名
age int 年龄
phone nvarchar(20) 电话

 

1、ExecuteIdentity : 执行命令,并且返回数据库的最后标识值。此方法一般用于执行INSERT命令

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb");
using (DbHelper db = new DbHelper(connection))
{
    long id = db.Executor.ExecuteIdentity("insert into `user` (`name`,`age`,`phone`) values ('小明',20,'13833233322')");
    Console.WriteLine(id);
}

此方法如在OleDbConnection/OdbcConnection执行环境下,将调用“SELECT @@IDENTITY ”语句获取标识值;如果是在SqlConnection执行环境下,则调用“SELECT SCOPE_IDENTITY() ”获取标识值;而如果是MySql执行环境下,则调用“SELECT LAST_INSERT_ID() ”获取标识值。

 

2、ExistRow : 判断是否存在某行数据符合条件的数据

using (DbHelper db = new DbHelper(connection))
{
    bool exist = db.Executor.ExistRow("user", "id=2");
    Console.WriteLine(exist);
}

3、GetRow<T> : 获取某行数据,并将行数据映射为某个数据对象

using (DbHelper db = new DbHelper(connection))
{
    //通过Id值获取数据
    var user = db.Executor.GetRow<DbUser>("user", 1);
    //通过条件获取数据
    var user2 = db.Executor.GetRow<DbUser>("user", "id=3 and age=30");
}

 

4、GetRowList<T> : 获取某些行数据,并将行数据映射为某个数据对象

using (DbHelper db = new DbHelper(connection))
{
    //获取某个表里的所有数据
    var users = db.Executor.GetRowList<DbUser>("user");
    //通过条件获取数据
    users = db.Executor.GetRowList<DbUser>("user", "id>2");
    //通过条件获取数据,并按id降序排列返回
    users = db.Executor.GetRowList<DbUser>("user", "id>2", "id desc");
    //获取符合条件的前10条数据
    users = db.Executor.GetRowList<DbUser>(10, "user", "id>2");
}

 

5、DeleteRow : 删除某些数据行,并返回已删除的行数

using (DbHelper db = new DbHelper(connection))
{
    //删除id=1,id=2, id=3的数据行
    int r = db.Executor.DeleteRow("user", 1, 2, 3);
    //删除符合条件的数据行
    int r1 = db.Executor.DeleteRow("user", "id>2");
}

 

 

6、RemoveRow<T> : 删除某些数据行,并返回被删除的行数据

using (DbHelper db = new DbHelper(connection))
{
    //删除id=1,id=2, id=3的数据行并返回行数据
    var rows = db.Executor.RemoveRow<DbUser>("user", 1, 2, 3);
    //删除符合条件的数据行并返回行数据
    rows = db.Executor.RemoveRow<DbUser>("user", "id>2");
}

 

7、Insert : 将某个对象插入到某个数据表。对象需要插入的数据(属性)需要用DbFieldAttribute做属性标记

注:以下示例代码中的DbUser类结构请看下面的DbFieldAttribute说明

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb");
var dbuser = new DbUser();
dbuser.Name = "小明";
dbuser.Age = 23;
dbuser.Phone = "13800138000";
using (DbHelper db = new DbHelper(connection))
{
    var f = db.Executor.Insert("user", dbuser);
    if (f)
    {
        //输出当前新记录的id值
        Console.WriteLine(dbuser.Id);
    }
}

 

8、Update : 将某个对象更新到某个数据表。对象需要更新的数据(属性)需要用DbFieldAttribute做属性标记

注:以下示例代码中的DbUser类结构请看下面的DbFieldAttribute说明

var dbuser = new DbUser();
dbuser.Id = 2;
dbuser.Name = "小明";
dbuser.Age = 23;
dbuser.Phone = "13800138000";
using (DbHelper db = new DbHelper(connection))
{
    var f = db.Executor.Update("user", dbuser);
    Console.WriteLine(f ? "更新成功" : "更新失败");
}

上面代码将会自动更新“id=2”的记录值。

 

数据字段属性标记:DbFieldAttribute

此属性标记是用于标记对象中的哪些属性在DbCommandExecutorInsertUpdate方法中是需要处理的。如下面的类结构定义

/// <summary>
/// 用户对象
/// </summary>
public class DbUser : DbObject
{
    public DbUser()
    {
        
    }
    /// <summary>
    /// 编号
    /// </summary>
    [DbField(DbType.Int32, Identity=true, PrimaryKey=true)]
    public int Id
    {
        get
        {
            return this.GetData<int>("Id", 0);
        }
        set
        {
            this["Id"] = value;
        }
    }

    /// <summary>
    /// 姓名
    /// </summary>
    [DbField(DbType.String, Size=20, Groups = 1)]
    public string Name
    {
        get
        {
            return this.GetData<string>("Name", null);
        }
        set
        {
            this["Name"] = value;
        }
    }
    /// <summary>
    /// 年龄
    /// </summary>
    [DbField(DbType.Int32, Groups = 1|2)]
    public int Age
    {
        get
        {
            return this.GetData<int>("Age", 0);
        }
        set
        {
            this["Age"] = value;
        }
    }
    /// <summary>
    /// 电话
    /// </summary>
    [DbField(DbType.String, Size = 20, Groups = 2)]
    public string Phone
    {
        get
        {
            return this.GetData<string>("Phone", null);
        }
        set
        {
            this["Phone"] = value;
        }
    }
}

标记了Id、Name、Age、Phone四个属性是需要处理的。

 

DbFieldAttribute的属性

1、Name : 定义对应于数据库的字段名称。如果为空或null则默认采用属性名称

/// <summary>
/// 姓名
/// </summary>
[DbField(DbType.String, Name = "UserName", Size = 20)]
public string Name
{
    get;
    set;
}

此属性定义了Name值,所以表示此属性是对应于数据库的“username”字段。

 

2、DbType : 数据字段类型

/// <summary>
/// 姓名
/// </summary>
[DbField(DbType.String, Size = 20)]
public string Name
{
    get;
    set;
}

对应的是DbType.String类型。如果采用空类型构造函数,则表示采用系统自动检测,如下

/// <summary>
/// 姓名
/// </summary>
[DbField(Size = 20)]
public string Name
{
    get;
    set;
}

因为未定义DbType,所以在运行Insert或Update方法,KT会自动根据属性类型“string”决定使用DbType.String类型。

 

 

3、PrimaryKey : 是否是主键字段。如果是则在UPDATE时将使用此属性值做为更新条件

4、Identity : 是否是自增标识字段,如果是则不参与INSERT与UPDATE,并且在INSERT后会自动获取

5、Size : 用于标记字段值的长度大小

6、Groups : 字段所在组,在插入或更新数据时可根据组更新或者插入部分字段值。

var dbuser = new DbUser();
dbuser.Id = 2;
dbuser.Name = "小明";
dbuser.Age = 23;
dbuser.Phone = "13800138000";
using (DbHelper db = new DbHelper(connection))
{
    var f = db.Executor.Update("user", dbuser, 1);
    Console.WriteLine(f ? "更新成功" : "更新失败");
}

上面代码则只更新属于组1的数据,也即是只更新“Name”与“Age”数据,“Phone“数据由于属于组2不会被更新!如果改为以下代码

var f = db.Executor.Update("user", dbuser, 2);

 

也即是只更新属于“组2”的数据,因为“Age”是被定义为混合组“Groups=1|2“,所以表示Age属于“组1”且也属于“组2”数据。所以上面代码里“Age“与“Phone“数据将会被更新。

如果将代码改为以下

var f = db.Executor.Update("user", dbuser, 1|2);

则表示同时更新“组1”与“组2”的数据,所以“Name“、“Age”、“Phone”都会被同时更新。

 

7、Insertable : 是否允许进行INSERT操作,默认允许

此属性可设置为以下三种值:

DbFieldOperable.Allowed :  允许操作

DbFieldOperable.OnlyGroup:  只允许同组的操作

DbFieldOperable.Unallowed:  不允许操作,也即是不会参与到INSERT操作中

 

/// <summary>
/// 姓名
/// </summary>
[DbField(Size = 20, Groups=1, Insertable = DbFieldOperable.OnlyGroup)]
public string Name
{
    get;
    set;
}

 

上面代码由于设置为只允许同组的操作,并且定义了属于“组1”数据,所以

                db.Executor.Insert("user", dbuser);     //Name不参与INSERT
                db.Executor.Insert("user", dbuser, 1);  //因为设置了插入组1数据,所以Name将会参与INSERT

 

8、Updateable : 是否允许进行UPDATE操作,默认允许

此属性类似Insertable

 

DbFieldAttribute的两个特殊常量

1、EmptyGroup : 表示空组,常量:0

如在Insert与Update方法中,传递此值,则表示是所有定义为“DbFieldOperable.Allowed”的数据

//以下两个方法相同效果
db.Executor.Insert("user", dbuser);     
db.Executor.Insert("user", dbuser, DbFieldAttribute.EmptyGroup); 

2、NoGroup  : 表示不属于任何组,常量:-1

如在Insert与Update方法中,传递此值,则表示只处理所有未定义“Groups”的属性数据。

db.Executor.Insert("user", dbuser, DbFieldAttribute.NoGroup); 
本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2011/08/27/2155619.html ,如需转载请自行联系原作者
相关文章
|
9月前
|
关系型数据库 分布式数据库 数据库
一库多能:阿里云PolarDB三大引擎、四种输出形态,覆盖企业数据库全场景
PolarDB是阿里云自研的新一代云原生数据库,提供极致弹性、高性能和海量存储。它包含三个版本:PolarDB-M(兼容MySQL)、PolarDB-PG(兼容PostgreSQL及Oracle语法)和PolarDB-X(分布式数据库)。支持公有云、专有云、DBStack及轻量版等多种形态,满足不同场景需求。2021年,PolarDB-PG与PolarDB-X开源,内核与商业版一致,推动国产数据库生态发展,同时兼容主流国产操作系统与芯片,获得权威安全认证。
|
5月前
|
机器学习/深度学习 算法 数据库
基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
本项目基于GoogleNet深度学习网络与GEI步态能量图提取技术,实现高精度步态识别。采用CASI库训练模型,结合Inception模块多尺度特征提取与GEI图像能量整合,提升识别稳定性与准确率,适用于智能安防、身份验证等领域。
|
10月前
|
数据库
【YashanDB数据库】yasboot查询数据库状态时显示数据库状态为off
yasboot查询数据库状态时显示数据库状态为off
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
436 2
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何判断数据库类型是否支持整库
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
182 2
|
SQL JavaScript 前端开发
websql数据库javascript操作库--websqlWrapper
websql数据库javascript操作库--websqlWrapper
|
数据库连接 数据库
Thinkphp6多数据库实例跨库操作
Thinkphp6多数据库实例跨库操作
202 0
|
SQL Oracle 关系型数据库
【计算机三级数据库技术】第12章 备份与恢复数据库--附思维导图
文章概述了数据库备份与恢复的基本概念、SQL Server和Oracle的备份与恢复机制,包括恢复模式、备份类型、还原顺序以及实现恢复的方法。
269 0
|
存储 监控 安全
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施