Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90767777
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767778
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767779
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767780
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767781
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767782
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767783
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767774
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767785
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767786
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767787
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767788
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767789
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767790
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767791
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767792
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767793
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767794
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767795
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767796
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767797
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767798
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767789
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767800
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767801
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767802
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767803
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767804
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767805
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767806
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767807
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767808
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767809
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767810
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767811
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767812
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767813
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767804
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767815
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767816
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767817
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767818
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767819
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767820
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767821
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767822
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767823
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767824
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767825
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767826
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767827
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 6 部分: .NET 编程(4)-sdccf-ChinaUnix博客
  • 博客访问: 90767828
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:36:27

实现 DB2 与 .NET 框架的无缝接口

developerWorks



用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237989) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237988) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237985) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237984) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237982) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237981) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237979) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237978) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237977) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237976) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237973) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237966) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237965) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237964) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237962) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237961) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237960) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237959) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237958) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237957) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237954) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237952) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237951) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237943) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237939) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


用 ADO.NET 读取和更新数据

在本节中,您将学习如何在 .NET 应用程序中使用 ADO.NET DB2Command 对象来执行 SQL 语句。读完本节后,您将学会:

  • 什么是 DB2Command 对象
  • 如何使用 ExecuteReader() 方法从 DB2 中读数据
  • 如何使用 ExecuteNonQuery() 方法插入和删除数据
  • 如何使用 ExecuteScalar() 方法返回单个值

DB2Command 对象允许您指定与 DB2 进行交互的方式。例如,可以对 DB2 中的数据执行 SELECTINSERTMODIFYDELETE 命令。

当使用 DB2 .NET Data Provider 时,可以通过 DB2Command 类的 ExecuteReader()ExecuteNonQuery() 方法以及它的 CommandTextCommandTypeTransaction 属性执行 SQL 语句。对于有输出的 SQL 语句,应该使用 ExecuteReader() 方法;它的结果可以从 DB2DataReader 对象中检索。对于所有其它 SQL 语句,应该使用 ExecuteNonQuery() 方法。 DB2Command 对象的 Transaction 属性应该初始化为一个 DB2TransactionDB2Transaction 对象负责回滚和提交数据库事务。

DB2Command 对象可以使用 DB2Connection.CreateCommand() 方法创建。下面是一个例子:

DB2Command cmd;
...
//assume conn is a DB2Connection object
cmd = conn.createCommand();

若要从 DB2Command 对象中执行 INSERTUPDATEDELETE SQL 语句,可将 CommandContext 设置为相应的 SQL 语句,并调用 cmd.ExecuteNonQuery() 方法。例如:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) 
VALUES (401, 'Peter', 99,'Mgr')";      
cmd.ExecuteNonQuery();

若要从 DB2Command 对象中执行一个查询,可将 CommandContext 设置为查询,并调用 cmd.ExecuteReader() 方法:



                    
// assume a DB2Connection conn 
DB2Command cmd = conn.CreateCommand(); 
DB2Transaction trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99"; 
DB2DataReader reader = cmd.ExecuteReader();

应用程序执行完一个数据库事务后,必须回滚该事务,否则提交该事务。可以使用 DB2Transaction 对象的 Commit()Rollback() 方法来执行提交和回滚。下面展示如何在 C# 中回滚或提交事务:

// assume a DB2Transaction object trans
trans.Rollback(); 
... 
trans.Commit();

可以使用 DB2DataReader 对象来解析结果集。使用 Read() 可前进到结果集的下一行。然后,在每次取回数据之后,使用适合数据类型的方法检索列值。可以使用 GetString()GetInt32()GetDecimal() 等方法(对于其它可用数据类型也有类似的方法)从输出的各个列中提取数据。可以使用 DB2DataReader.Close() 方法关闭 DB2DataReader。当输出读取完毕时,应该始终执行这样的操作。清单 7 展示了在 C# 中如何读取结果集:



                    
// assume a DB2DataReader reader 
Int16 id = 0; 
String name = ""; 
string job = "";

// Output the results of the query 
while(reader.Read()) 
{ 
    id = reader.GetInt16(0); 
    name = reader.GetString(1); 
    job = reader.GetString(2);
         
    Console.WriteLine(" " + id + " " + name + " " + job); 
} 

reader.Close();





回页首


对于动态 SQL,需要添加参数到 DB2Command 对象中,并设置这些参数的值,例如:



                    
String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};

//Assume conn is a DB2Connection object
DB2Command cmd = conn.CreateCommand(); 
trans = conn.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.CommandText = insertStmt;
cmd.Prepare(); 

// Declare the parameters for the statement 
cmd.Parameters.Add("@id", DB2Type.SmallInt);
cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
//Set their values and then insert
for (int i = 0; i < 3; i++) 
{     	
  cmd.Parameters["@id"].Value = 401 + i;
  cmd.Parameters["@name"].Value = staff[i,0];
  cmd.Parameters["@job"].Value = staff[i,1];
        
  cmd.ExecuteNonQuery();
}





回页首


清单 9 演示了本节中讨论的所有概念,包括:

  • 创建 DB2Command 对象
  • 执行 INSERTUPDATEDELETE 语句
  • 执行 SQL 查询
  • 解析结果集对象


                    

using System;
using System.Data;
using System.IO;
using IBM.Data.DB2;


class AccessSampDb
{
  public static void Main(String[] args)
  {
    DB2Connection conn = null;
    DB2Transaction trans = null;
    DB2DataReader reader = null;
     
    String insertStmt = "INSERT INTO STAFF (ID,NAME,DEPT,JOB) VALUES (?, ?, 99, ?)";
    String [,] staff =  {{"Smyth","LW"},{"Hesky","RW"},{"Peter","CLK"}};
  
    try
    {
      String dbName = "SAMPLE";
      String connectString = "Database=" + dbName; 
      
      conn = new DB2Connection(connectString); 
      
      //Connecting to SAMPLE database
      Console.Writeline("Connecting to SAMPLE database");
      conn.Open(); 

      DB2Command cmd = conn.CreateCommand(); 
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = insertStmt;
      cmd.Prepare(); 
      
      // Declare the parameters for the statement and set their value
      cmd.Parameters.Add("@id", DB2Type.SmallInt);
      cmd.Parameters.Add("@name", DB2Type.VarChar, 9);
      cmd.Parameters.Add("@job", DB2Type.Char, 5);
           
      //Insert into STAFF table
      for (int i = 0; i < 3; i++) 
      { 
        //Set the values to the parameters	
        cmd.Parameters["@id"].Value = 401 + i;
        cmd.Parameters["@name"].Value = staff[i,0];
        cmd.Parameters["@job"].Value = staff[i,1];
        
        cmd.ExecuteNonQuery();
      }
            
      trans.Commit();

      //Query data in table STAFF
      trans = conn.BeginTransaction(); 
      cmd.Transaction = trans; 
      cmd.CommandText = "SELECT ID, NAME, JOB FROM STAFF WHERE DEPT = 99";
      reader = cmd.ExecuteReader();     
 
      Int16 id = 0; 
      String name = ""; 
      String job = "";

      // Output the results of the query 
      Console.WriteLine("Employe #  Employee Name   Job");
      while(reader.Read()) 
      { 
         id = reader.GetInt16(0); 
         name = reader.GetString(1); 
         job = reader.GetString(2);
         
         Console.WriteLine(" " + id + "        " + name + "          " + job); 
      } 

      reader.Close();
      trans.Commit();     
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.Message); 
    }
    finally
    {
    	if (reader != null)
    	{
          reader.Close();
    	}
    	
    	if (conn != null)
    	{
            conn.Close();
    	}
    } 
  }
}


若要编译该代码,可将该程序放入包含脚本 bldapp.bat 的 %DB2PATH%\samples\.NET\cs 目录中。然后发出以下命令:

 bldapp AccessSamplDb
 

若要运行该应用程序,可发出以下命令:

 AccessSamplDb
 

这个应用程序的输出应类似下面的内容:

Employe #  Employee Name   Job
 401        Smyth          LW
 402        Hesky          RW
 403        Peter          CLK
阅读(237938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~