完成 DB2 与 .NET 框架的无缝接口
用 ADO.NET 读取和更新数据
在本节中,您将学习如何在 .NET 利用递次中运用 ADO.NET DB2Command
工具来实行 SQL 语句。读完本节后,您将学会:
- 什么是
DB2Command
工具 - 若何运用
ExecuteReader()
方法从 DB2 中读数据 - 若何运用
ExecuteNonQuery()
方法拔出和删除数据 - 若何运用
ExecuteScalar()
方法前往单个值
DB2Command 工具
DB2Command
工具容许您指定与 DB2 住手交互的体例。例如,可以对 DB2 中的数据实行 SELECT
、INSERT
、MODIFY
和 DELETE
敕令。
当运用 DB2 .NET Data Provider 时,可以经过 DB2Command
类的 ExecuteReader()
和 ExecuteNonQuery()
方法以及它的 CommandText
、CommandType
和 Transaction
属性实行 SQL 语句。关于有输出的 SQL 语句,应该运用 ExecuteReader()
方法;它的结果可以从 DB2DataReader
工具中检索。关于统统其余 SQL 语句,应该运用 ExecuteNonQuery()
方法。 DB2Command
工具的 Transaction
属性应该初始化为一个 DB2Transaction
。DB2Transaction
工具担任回滚和提交数据库事宜。
DB2Command
工具可以运用 DB2Connection.CreateCommand()
方法创设。下面是一个例子:
DB2Command cmd; ... //assume conn is a DB2Connection object cmd = conn.createCommand();
若要从 DB2Command
工具中实行 INSERT
、UPDATE
或 DELETE
SQL 语句,可将 CommandContext
设置为响应的 SQL 语句,并挪用 cmd.ExecuteNonQuery()
方法。例如:
清单 5. 实行非盘问 SQL 语句
// 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()
方法:
清单 6. 实行盘问
// 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# 中若何读取结果集:
清单 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();
![](https://www.ibm.com/i/v14/rules/blue_rule.gif)
![](https://www.ibm.com/i/c.gif)
![](https://www.ibm.com/i/c.gif)
![](https://www.ibm.com/i/v14/icons/u_bold.gif)
回页首
将参数添加到 DB2Command 工具中
关于静态 SQL,需要添加参数到 DB2Command
工具中,并设置这些参数的值,例如:
清单 8. 添加参数到 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(); }
![](https://www.ibm.com/i/v14/rules/blue_rule.gif)
![](https://www.ibm.com/i/c.gif)
![](https://www.ibm.com/i/c.gif)
![](https://www.ibm.com/i/v14/icons/u_bold.gif)
回页首
示例代码
清单 9 演示了本节中接头的统统观观点,包孕:
- 创设
DB2Command
工具 - 实行
INSERT
、UPDATE
或DELETE
语句 - 实行 SQL 盘问
- 理睬结果集工具
清单 9. DB2Command:示例利用递次
using System; using System.Data; using System.IO; using IBM.Data.DB2; >
若要编译该代码,可将该递次放入包孕剧本 bldapp.bat 的 �2PATH%\samples\.NET\cs 目录中。然后发出以下敕令:
bldapp AccessSamplDb
若要运转该利用递次,可发出以下敕令:
AccessSamplDb
这个利用递次的输出应类似下面的内容:
Employe # Employee Name Job 401 Smyth LW 402 Hesky RW 403 Peter CLK
版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始出处 、作者信息和本声明。否则将究查法则责任。