NDO - 快速入门
1. Shippers 表的结构
[ShipperID] [int] IDENTITY (1, 1) NOT NULL ,
[CompanyName] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Phone] [nvarchar] (24) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
2. 简单的数据库约定配置(key = "ConnectionString")
<add key="ConnectionString" value="Data Source=localhost; Database=Northwind; Integrated Security=true;"/>
</appSettings>
3. 用IStatement - sql 语句来操作数据库(关于IStatement 和 IQrocedure 更多的使用方法,请查看API,或下载包中的类图文挡)
string deleteSql = "delete from shippers where ShipperID = @id";
string updateSql = "update shippers set CompanyName = @name,Phone = @phone where ShipperID = @id";
string selectSql = "select * from Shippers";
string selectSqlByID = "select * from shippers where shipperID = @id";
try
{
//get NDOManager instance: nm
INDOManager nm = NDOManager.Instance;
//create Statement object and set parameters
IStatement stmt = nm.CreateStatement(insertSql)
.MakeInParam("CompanyName",DbType.String,40,"NDO Test")
.MakeInParam("Phone",DbType.String,24,"(101) 555-6666");
//insert a shipper record
object o = stmt.GetScalar();
Console.WriteLine(o);
//get a shipper record by id
DataRow shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//update shipper record
int effectRows = stmt.MakeInParam("name","update ndo test!")
.MakeInParam("phone","(101) 666-8888")
.MakeInParam("id",(int)o)
.Update(updateSql);
Console.WriteLine(effectRows);
//check update result
shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//delete a shipper
stmt.MakeInParam("id",(int)o)
.Update(deleteSql);
shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(shipper == null);
Console.ReadLine();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
4. 用IProcedure - 存储过程来操作数据库(存储过程的内容和上面的sql 一样)
string deleteSql = "up_delete_shipper";
string updateSql = "up_update_shipper";
string selectSql = "up_selectAll_shipper";
string selectSqlByID = "up_selectByID_shipper";
try
{
//get NDOManager instance: nm
INDOManager nm = NDOManager.Instance;
//create Statement object and set parameters
IStatement stmt = nm.CreateProcedure(insertSql)
.MakeInParam("CompanyName",DbType.String,40,"NDO Test")
.MakeInParam("Phone",DbType.String,24,"(101) 555-6666");
//insert a shipper record
object o = stmt.GetScalar();
Console.WriteLine(o);
//get a shipper record by id
DataRow shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//update shipper record
int effectRows = stmt.MakeInParam("name","update ndo test!")
.MakeInParam("phone","(101) 666-8888")
.MakeInParam("id",(int)o)
.Update(updateSql);
Console.WriteLine(effectRows);
//check update result
shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//delete a shipper
stmt.MakeInParam("id",(int)o)
.Update(deleteSql);
shipper = stmt.MakeInParam("id",(int)o)
.GetDataRow(selectSqlByID);
Console.WriteLine(shipper == null);
Console.ReadLine();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
5. 用Query 对象实现
{
//get NDOManager instance: nm
Query qu = NDOManager.Instance.CreateQuery("Shippers");
// insert a shipper record
qu.Columns("CompanyName","Phone")
.Values("NDO Test","(101) 555-6666")
.Insert();
//get max value
object o = qu.Max("ShipperID").GetScalar();
//get a shipper record by id
DataRow shipper = (qu.NewCondition("ShipperID") == o).GetDataRow();
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//update shipper record
int effectRows = qu
.Set("CompanyName","update ndo test!")
.Set("Phone","(101) 666-8888")
.Where("ShipperID",o)
.Update();
//check update result
shipper = qu.Filter("ShipperID = @id")
.AddParam("id",o)
.GetDataRow();
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper["CompanyName"],
(string)shipper["Phone"]);
//delete a shipper
qu.Where("ShipperID",o).Delete();
shipper = qu.NewWhere("ShipperID",o).GetDataRow();
Console.WriteLine(shipper == null);
Console.ReadLine();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
6. 用活动记录实现,通过NDOGenerator 工具生成一个实体类
{
public Shipper():base("Shippers")
{
}
protected override ActiveRecord NewInstance()
{
return new Shipper();
}
public int ShipperID
{
get { return this.settings.GetInt32("ShipperID"); }
set { this["ShipperID"] = value; }
}
public string CompanyName
{
get { return (string)this["CompanyName"]; }
set { this["CompanyName"] = value; }
}
public string Phone
{
get { return (string)this["Phone"]; }
set { this["Phone"] = value; }
}
}
具体的CRUD 代码如下:
{
Shipper shipper = new Shipper();
shipper.CompanyName = "NDO Test";
shipper.Phone = "(101) 555-6666";
// insert a shipper record
shipper.Save();
Console.WriteLine(shipper.ShipperID);
Shipper shipper2 = new Shipper();
//get a shipper record by id
shipper2.LoadByKey(shipper.ShipperID);
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper2.CompanyName,
(string)shipper2.Phone);
//update shipper record
shipper2.CompanyName = "update ndo test!";
shipper2.Phone = "(101) 666-8888";
shipper2.Save();
//check update result
Shipper shipper3 = new Shipper();
shipper3.ShipperID = shipper2.ShipperID;
shipper3.Load();
Console.WriteLine(" CompanyName = {0}\t Phone = {1} ",
(string)shipper3.CompanyName,
(string)shipper3.Phone);
//delete a shipper
shipper3.Delete();
//check delete result
Shipper shipper4 = new Shipper();
shipper4.ShipperID = shipper3.ShipperID;
shipper4.Load();
Console.WriteLine(shipper4.CompanyName == null || shipper4.CompanyName == "");
Console.ReadLine();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
从以上例子大家可以看到用NDO 操作数据库是如何的简单!最后有一点需要声明一下NDO组件是基于.NET 1.1 的,不支持.NET 2.0的范性技术,但是.NET 2.0仍然可以使用NDO组件的.
最后附上NDO组件(在以前的基础上添加了对ORACLE和ACCESS的支持)和本文例子以及相关的工具等
上一偏 下一偏
NDO - 快速入门相关推荐
- Shiro第一个程序:官方快速入门程序Qucickstart详解教程
目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...
- 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧
异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...
- Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...
- 《iOS9开发快速入门》——导读
本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...
- OpenStack快速入门
OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...
- Expression Blend实例中文教程(2) - 界面快速入门
上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...
- 图文并茂!60页PPT《快速入门python数据分析路线》(附链接)
一个月不走弯路快速入门学python和python数据分析路线,呕心沥血加班加点做了2天,一共63页,该课件讲的都是路线中的核心知识,今天把该PPT分享给大家,能根据该课件提到的知识有针对性的学,做到 ...
最新文章
- Jekyll博客统计访问量,阅读量工具总结--LeanCloud,不蒜子,Valine,Google Analytics
- centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop
- 超详细的java生成excel文件并下载
- UTF-8格式的文本文件程序读取异常
- 程序员下班后收到工作信息怎么办?
- 【数据库实验课堂】实验一:数据库的管理
- 程序员必须尽早作打算
- Thinkphp5内核大型程序员交流博客系统源码
- mysql 主从热备份 5.6 参数_MySQL主从热备份
- Type Writer Audio X for Mac(单声道到立体声转换插件)
- MFC的运行过程,TheApp对象
- 人工智能之父图灵之死:谜一样的解谜者
- WIN10 拨号连接下 如何开启移动热点
- 调用模板类出现undefined reference to的情况及解决方案
- 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)
- mpvue利用painter生成海报
- axios向springboot后台传递json数据
- SDN之NOS概述——云原生
- Word文件的编辑密码忘记了怎么办?
- 基于QT实现的商品销售管理系统
热门文章
- 基于TensorRT和onnxruntime下pytorch的Bert模型加速对比实践
- 第三次作业--结对编程
- 是谁在觊觎娱乐圈站点?揭秘神秘黑客组织-黑界
- php 姓氏表,php 根据姓氏笔画排序怎么做
- amd显卡用黑苹果输出黑屏_黑苹果AMD NVIDIA Intel显卡咋驱动?速戳这里
- 面试题(4)Oracle
- C++:初始值设定项
- 解决发送push的emoji表情的实用方案
- java 中的todo_详解在TodoController中引用TodoRepository
- STM32F103_study48_The punctual atoms(STM32 Serial communication experiment )