本文以sqlserver 2000 自带的Northwind数据库中的Shippers表的CRUD作为演示例子
      
      1.   Shippers 表的结构

CREATE TABLE [dbo].[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")

<appSettings>
        <add key="ConnectionString" value="Data Source=localhost; Database=Northwind; Integrated Security=true;"/>
</appSettings>

3.  用IStatement - sql 语句来操作数据库(关于IStatement 和 IQrocedure 更多的使用方法,请查看API,或下载包中的类图文挡)

string insertSql = "insert into shippers ( CompanyName,Phone) values ( @CompanyName,@Phone);select CAST( SCOPE_IDENTITY() AS INT)";
            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 insertSql = "up_insert_shipper";
            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 对象实现

try
            {
                //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 class Shipper:ActiveRecord
    {
        
        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 代码如下:

try
            {
                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 - 快速入门相关推荐

  1. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  2. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  3. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  4. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  5. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  6. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  7. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  8. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

  9. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

  10. 图文并茂!60页PPT《快速入门python数据分析路线》(附链接)

    一个月不走弯路快速入门学python和python数据分析路线,呕心沥血加班加点做了2天,一共63页,该课件讲的都是路线中的核心知识,今天把该PPT分享给大家,能根据该课件提到的知识有针对性的学,做到 ...

最新文章

  1. Jekyll博客统计访问量,阅读量工具总结--LeanCloud,不蒜子,Valine,Google Analytics
  2. centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop
  3. 超详细的java生成excel文件并下载
  4. UTF-8格式的文本文件程序读取异常
  5. 程序员下班后收到工作信息怎么办?
  6. 【数据库实验课堂】实验一:数据库的管理
  7. 程序员必须尽早作打算
  8. Thinkphp5内核大型程序员交流博客系统源码
  9. mysql 主从热备份 5.6 参数_MySQL主从热备份
  10. Type Writer Audio X for Mac(单声道到立体声转换插件)
  11. MFC的运行过程,TheApp对象
  12. 人工智能之父图灵之死:谜一样的解谜者
  13. WIN10 拨号连接下 如何开启移动热点
  14. 调用模板类出现undefined reference to的情况及解决方案
  15. 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)
  16. mpvue利用painter生成海报
  17. axios向springboot后台传递json数据
  18. SDN之NOS概述——云原生
  19. Word文件的编辑密码忘记了怎么办?
  20. 基于QT实现的商品销售管理系统

热门文章

  1. 基于TensorRT和onnxruntime下pytorch的Bert模型加速对比实践
  2. 第三次作业--结对编程
  3. 是谁在觊觎娱乐圈站点?揭秘神秘黑客组织-黑界
  4. php 姓氏表,php 根据姓氏笔画排序怎么做
  5. amd显卡用黑苹果输出黑屏_黑苹果AMD NVIDIA Intel显卡咋驱动?速戳这里
  6. 面试题(4)Oracle
  7. C++:初始值设定项
  8. 解决发送push的emoji表情的实用方案
  9. java 中的todo_详解在TodoController中引用TodoRepository
  10. STM32F103_study48_The punctual atoms(STM32 Serial communication experiment )