NDO - 快速入门
本文以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的支持)和本文例子以及相关的工具等
上一偏 下一偏
1. Shippers 表的结构





2. 简单的数据库约定配置(key = "ConnectionString")



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



























































4. 用IProcedure - 存储过程来操作数据库(存储过程的内容和上面的sql 一样)




























































5. 用Query 对象实现



















































6. 用活动记录实现,通过NDOGenerator 工具生成一个实体类































具体的CRUD 代码如下:





















































从以上例子大家可以看到用NDO 操作数据库是如何的简单!最后有一点需要声明一下NDO组件是基于.NET 1.1 的,不支持.NET 2.0的范性技术,但是.NET 2.0仍然可以使用NDO组件的.
最后附上NDO组件(在以前的基础上添加了对ORACLE和ACCESS的支持)和本文例子以及相关的工具等
上一偏 下一偏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架