NDO - 快速入门

      本文以sqlserver 2000 自带的Northwind数据库中的Shippers表的CRUD作为演示例子
      
      1.   Shippers 表的结构
None.gif CREATE   TABLE   [ dbo ] . [ Shippers ]  (
None.gif    
[ ShipperID ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
None.gif    
[ CompanyName ]   [ nvarchar ]  ( 40 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
None.gif    
[ Phone ]   [ nvarchar ]  ( 24 ) COLLATE Chinese_PRC_CI_AS  NULL  
None.gif
ON   [ PRIMARY ]

      2.   简单的数据库约定配置(key = "ConnectionString")
None.gif < appSettings >
None.gif        
< add  key ="ConnectionString"  value ="Data Source=localhost; Database=Northwind; Integrated Security=true;" />
None.gif
</ appSettings >

     3.  用IStatement - sql 语句来操作数据库(关于IStatement 和 IQrocedure 更多的使用方法,请查看API,或下载包中的类图文挡)
   
None.gif string  insertSql  =   " insert into shippers ( CompanyName,Phone) values ( @CompanyName,@Phone);select CAST( SCOPE_IDENTITY() AS INT) " ;
None.gif            
string  deleteSql  =   " delete from shippers where ShipperID = @id " ;
None.gif            
string  updateSql  =   " update shippers set CompanyName = @name,Phone = @phone where ShipperID = @id " ;
None.gif            
string  selectSql  =   " select * from Shippers " ;
None.gif            
string  selectSqlByID  =   " select * from shippers where shipperID = @id " ;
None.gif
None.gif            
try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
//get NDOManager instance: nm
InBlock.gif
                INDOManager nm = NDOManager.Instance;
InBlock.gif
InBlock.gif                
//create Statement object and set parameters
InBlock.gif
                IStatement stmt = nm.CreateStatement(insertSql)
InBlock.gif                    .MakeInParam(
"CompanyName",DbType.String,40,"NDO Test")
InBlock.gif                    .MakeInParam(
"Phone",DbType.String,24,"(101)  555-6666");
InBlock.gif            
InBlock.gif                
//insert a shipper record
InBlock.gif
                object o = stmt.GetScalar();
InBlock.gif                Console.WriteLine(o);
InBlock.gif
InBlock.gif                
//get a shipper record by id
InBlock.gif
                DataRow shipper = stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif                
//update shipper record
InBlock.gif
                int effectRows = stmt.MakeInParam("name","update ndo test!")
InBlock.gif                    .MakeInParam(
"phone","(101) 666-8888")
InBlock.gif                    .MakeInParam(
"id",(int)o)
InBlock.gif                    .Update(updateSql);
InBlock.gif
InBlock.gif                Console.WriteLine(effectRows);
InBlock.gif
InBlock.gif                
//check update result
InBlock.gif
                shipper = stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif                
//delete a shipper
InBlock.gif
                stmt.MakeInParam("id",(int)o)
InBlock.gif                    .Update(deleteSql);    
InBlock.gif    
InBlock.gif                shipper 
= stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(shipper 
== null);
InBlock.gif
InBlock.gif                Console.ReadLine();
ExpandedBlockEnd.gif            }

None.gif            
catch (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Console.WriteLine(ex.Message);
ExpandedBlockEnd.gif            }

      4.  用IProcedure - 存储过程来操作数据库(存储过程的内容和上面的sql 一样)
None.gif string  insertSql  =   " up_insert_shipper " ;
None.gif            
string  deleteSql  =   " up_delete_shipper " ;
None.gif            
string  updateSql  =   " up_update_shipper " ;
None.gif            
string  selectSql  =   " up_selectAll_shipper " ;
None.gif            
string  selectSqlByID  =   " up_selectByID_shipper " ;
None.gif
None.gif            
try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
//get NDOManager instance: nm
InBlock.gif
                INDOManager nm = NDOManager.Instance;
InBlock.gif
InBlock.gif                
//create Statement object and set parameters
InBlock.gif
                IStatement stmt = nm.CreateProcedure(insertSql)
InBlock.gif                    .MakeInParam(
"CompanyName",DbType.String,40,"NDO Test")
InBlock.gif                    .MakeInParam(
"Phone",DbType.String,24,"(101)  555-6666");
InBlock.gif            
InBlock.gif                
//insert a shipper record
InBlock.gif
                object o = stmt.GetScalar();
InBlock.gif                Console.WriteLine(o);
InBlock.gif
InBlock.gif                
//get a shipper record by id
InBlock.gif
                DataRow shipper = stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif                
//update shipper record
InBlock.gif
                int effectRows = stmt.MakeInParam("name","update ndo test!")
InBlock.gif                    .MakeInParam(
"phone","(101) 666-8888")
InBlock.gif                    .MakeInParam(
"id",(int)o)
InBlock.gif                    .Update(updateSql);
InBlock.gif
InBlock.gif                Console.WriteLine(effectRows);
InBlock.gif
InBlock.gif                
//check update result
InBlock.gif
                shipper = stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif                
//delete a shipper
InBlock.gif
                stmt.MakeInParam("id",(int)o)
InBlock.gif                    .Update(deleteSql);    
InBlock.gif    
InBlock.gif                shipper 
= stmt.MakeInParam("id",(int)o)
InBlock.gif                    .GetDataRow(selectSqlByID);
InBlock.gif
InBlock.gif                Console.WriteLine(shipper 
== null);
InBlock.gif
InBlock.gif                Console.ReadLine();
ExpandedBlockEnd.gif            }

None.gif            
catch (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Console.WriteLine(ex.Message);
ExpandedBlockEnd.gif            }

None.gif

         5. 用Query 对象实现
None.gif try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
//get NDOManager instance: nm
InBlock.gif
                Query qu = NDOManager.Instance.CreateQuery("Shippers");
InBlock.gif
InBlock.gif                
// insert a shipper record
InBlock.gif
                qu.Columns("CompanyName","Phone")
InBlock.gif                    .Values(
"NDO Test","(101)  555-6666")
InBlock.gif                    .Insert();
InBlock.gif
InBlock.gif                
//get max value 
InBlock.gif
                object o = qu.Max("ShipperID").GetScalar();
InBlock.gif
InBlock.gif                
//get a shipper record by id
InBlock.gif
                DataRow shipper = (qu.NewCondition("ShipperID"== o).GetDataRow(); 
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif
InBlock.gif                
//update shipper record
InBlock.gif
                int effectRows = qu
InBlock.gif                    .Set(
"CompanyName","update ndo test!")
InBlock.gif                    .Set(
"Phone","(101) 666-8888")
InBlock.gif                    .Where(
"ShipperID",o)
InBlock.gif                    .Update();
InBlock.gif
InBlock.gif                
//check update result
InBlock.gif
                shipper = qu.Filter("ShipperID = @id")
InBlock.gif                    .AddParam(
"id",o)
InBlock.gif                    .GetDataRow();
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper["CompanyName"],
InBlock.gif                    (
string)shipper["Phone"]);
InBlock.gif
InBlock.gif
InBlock.gif                
//delete a shipper
InBlock.gif
                qu.Where("ShipperID",o).Delete();
InBlock.gif
InBlock.gif
InBlock.gif                shipper 
= qu.NewWhere("ShipperID",o).GetDataRow();
InBlock.gif                Console.WriteLine(shipper 
== null);
InBlock.gif
InBlock.gif                Console.ReadLine();
ExpandedBlockEnd.gif            }

None.gif            
catch (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Console.WriteLine(ex.Message);
ExpandedBlockEnd.gif            }

         6.  用活动记录实现,通过NDOGenerator 工具生成一个实体类
None.gif public   class  Shipper:ActiveRecord
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
InBlock.gif        
public Shipper():base("Shippers")
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
protected override ActiveRecord NewInstance()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return new Shipper();
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif
InBlock.gif        
public int ShipperID
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{  
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn this.settings.GetInt32("ShipperID"); }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gifthis["ShipperID"= value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public string CompanyName
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{  
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn (string)this["CompanyName"]; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gifthis["CompanyName"= value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public string Phone
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{  
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn (string)this["Phone"]; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gifthis["Phone"= value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
ExpandedBlockEnd.gif    }

具体的CRUD 代码如下:
None.gif try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Shipper shipper 
= new Shipper();
InBlock.gif                shipper.CompanyName 
= "NDO Test";
InBlock.gif                shipper.Phone 
= "(101)  555-6666";
InBlock.gif
InBlock.gif                
// insert a shipper record
InBlock.gif
                shipper.Save();
InBlock.gif
InBlock.gif                Console.WriteLine(shipper.ShipperID);
InBlock.gif
InBlock.gif
InBlock.gif                Shipper shipper2 
= new Shipper();
InBlock.gif                
//get a shipper record by id
InBlock.gif
                shipper2.LoadByKey(shipper.ShipperID);
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper2.CompanyName,
InBlock.gif                    (
string)shipper2.Phone);
InBlock.gif
InBlock.gif
InBlock.gif                
//update shipper record
InBlock.gif
                shipper2.CompanyName = "update ndo test!";
InBlock.gif                shipper2.Phone 
= "(101) 666-8888";
InBlock.gif                shipper2.Save();
InBlock.gif
InBlock.gif
InBlock.gif                
//check update result
InBlock.gif
                Shipper shipper3 = new Shipper();
InBlock.gif                shipper3.ShipperID 
= shipper2.ShipperID;
InBlock.gif                shipper3.Load();
InBlock.gif
InBlock.gif                Console.WriteLine(
" CompanyName = {0}\t Phone = {1} ",
InBlock.gif                    (
string)shipper3.CompanyName,
InBlock.gif                    (
string)shipper3.Phone);
InBlock.gif
InBlock.gif                
//delete a shipper
InBlock.gif
                shipper3.Delete();
InBlock.gif
InBlock.gif                
//check delete result
InBlock.gif
                Shipper shipper4 = new Shipper();
InBlock.gif                shipper4.ShipperID 
= shipper3.ShipperID;
InBlock.gif                shipper4.Load();
InBlock.gif
InBlock.gif                Console.WriteLine(shipper4.CompanyName 
== null || shipper4.CompanyName == "");
InBlock.gif
InBlock.gif                Console.ReadLine();
ExpandedBlockEnd.gif            }

None.gif            
catch (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Console.WriteLine(ex.Message);
ExpandedBlockEnd.gif            }

None.gif

      从以上例子大家可以看到用NDO 操作数据库是如何的简单!最后有一点需要声明一下NDO组件是基于.NET 1.1 的,不支持.NET 2.0的范性技术,但是.NET 2.0仍然可以使用NDO组件的.
      最后附上 NDO组件(在以前的基础上添加了对ORACLE和ACCESS的支持)和本文例子以及相关的工具

       上一偏   下一偏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值