本文我们通过一个Oracle提供的示例来讲解利用利用ODPNET 执行SQL语句访问数据库时设置参数
首先创建一个C#应用程序为了简单和方便可以创建一个控制台程序
然后第一件事是添加对Oracle ODPNET的引用打开项目的解决方案管理页然后在引用目录上点右键并选择添加引用菜单选择ORACLE_HOME\bin\OracleDataAccesssdll
为了能够使用ODPNET 我们在程序前应该引入相关的命名空间
using OracleDataAccessClient;
using OracleDataAccessTypes;
首先需要建立到数据库的连接在上一文章中已经讲过这方面的基本知识
接下来的工作是建立表SQL语句为CREATE TABLE multimedia_tab(thekey NUMBER() PRIMARY KEY story CLOB sound BLOB)
然后插入一条记录进行测试SQL语句为INSERT INTO multimedia_tab values(This is a long story Once upon a time )
建表和插入记录都使用OracleCommand 对象的 ExecuteNonQuery方法来执行SQL 语句
在ODPNET 中使用参数的方法为
◎通过SQL语句创建一个OracleCommand在SQL语句中参数使用::来代替分别表示第一个第二个参数
◎在OracleCommand对象中添加参数
◎设置参数的值
◎调用OracleCommand的ExecuteNonQuery执行SQL语句
◎从参数对象中得到返回的值
下面是代码
// 创建OracleCommand 对象
OracleCommand cmd = new OracleCommand(
begin select story into : from multimedia_tab where thekey = ; end;);
cmdConnection = con;
//把命令类型设置为Text表示执行SQL语句
cmdCommandType = CommandTypeText;
// 添加参数第一个参数表示参数名称第二个参数表示参数类型
OracleParameter param = cmdParametersAdd(clobdata
OracleDbTypeClob);
// 设置参数为输出类型如果是输入参数则设置为ParameterDirectionInputOutput
paramDirection = ParameterDirectionOutput;
// Execute command
try
{
// 执行SQL语句
// 如果是输入参数那么这时SQL中的: 被替换为OracleParameter param 对象所代表的值
cmdExecuteNonQuery();
// 因为参数是输出参数所以可以通过得到参数的值来获取SQL语句中参数所表示的值
string lob_data = (string) ((OracleClob)(cmdParameters[]Value))Value;
// 显示结果
ConsoleWriteLine(Data is: + lob_data);
}
catch (Exception e)
{
ConsoleWriteLine(eMessage);
}
在执行设置了参数的SQL语句时可以使用ExecuteReader ExecuteNonQuery ExecuteScalar 来执行SQL语句
参数的类型可以为InputOutputOutputReturnValue
在ODPNET中还有一项功能就是利用数组绑定到参数上来一次性插入多个记录这里讲一下多个记录同时插入时如何绑定一个数组到参数上
// 设置数组
int[] myArrayDeptNo = new int[]{ };
// 创建OracleCommand 对象
cmdCommandText = insert into dept(deptno) values (:deptno);
// 设置数组大小
cmdArrayBindCount = ;
// 创建参数
OracleParameter prm = new OracleParameter(deptno OracleDbTypeInt);
prmDirection = ParameterDirectionInput;
prmValue = myArrayDeptNo;
// 添加参数到OracleCommand对象中
cmdParametersAdd(prm);
// 执行这时候有三条记录被插入
cmdExecuteNonQuery();
::otn 对内容进行了修改
------------------------签----名----
$)
movb$x%ah
int$x
movw%ax()
movw$SYSSEG %ax