C#调用 Oracle 存储过程样例代码
-- 建表
CREATE TABLE sale_report (
sale_date DATE NOT NULL ,
sale_item VARCHAR(2) NOT NULL ,
sale_money DECIMAL(10,2) NOT NULL,
PRIMARY KEY(sale_date, sale_item)
);
-- 測试数据
DECLARE
v_begin_day DATE;
v_end_day DATE;
BEGIN
v_begin_day := TO_DATE('2009-01-01', 'YYYY-MM-DD');
v_end_day := TO_DATE('2010-01-01', 'YYYY-MM-DD');
WHILE v_begin_day < v_end_day LOOP
INSERT INTO SALE_REPORT VALUES(v_begin_day, 'A', 1 );
INSERT INTO SALE_REPORT VALUES(v_begin_day, 'B', 2 );
INSERT INTO SALE_REPORT VALUES(v_begin_day, 'C', 3 );
v_begin_day := v_begin_day + 1;
END LOOP;
END;
/
-- 測试函数
CREATE OR REPLACE FUNCTION HelloWorldFunc
RETURN VARCHAR2
AS
BEGIN
RETURN 'Hello World!';
END;
/
-- 測试存储过程
CREATE OR REPLACE PROCEDURE HelloWorld2 (
p_user_name IN VARCHAR2,
p_out_val OUT VARCHAR2,
p_inout_val IN OUT VARCHAR2
) AS
BEGIN
dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
p_out_val := 'A';
p_inout_val := 'B';
END HelloWorld2;
/
-- 測试返回结果集的函数
create or replace package pkg_HelloWorld as
-- 定义ref cursor类型
type myrctype is ref cursor;
--函数申明
function getHelloWorld return myrctype;
end pkg_HelloWorld;
/
CREATE OR REPLACE package body pkg_HelloWorld as
function getHelloWorld return myrctype
IS
return_cursor myrctype;
BEGIN
OPEN return_cursor FOR 'SELECT ''Hello'' AS a, ''World'' AS B FROM dual';
return return_cursor;
END getHelloWorld;
end pkg_HelloWorld;
/
以上为数据库表、測试数据、存储过程脚本
下面为 C#样例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OracleClient;
namespace A0170_Oracle.Sample
{
/// <summary>
/// 用于 訪问 Oracle 数据库 存储过程与函数 的样例。
///
/// 注意:这个样例所使用的 表 和 数据, 请參考项目下的 Schema.sql 文件。
///
/// </summary>
class CallOracleFuncProc
{
/// <summary>
/// Oracle 的数据库连接字符串.
/// </summary>
private const String connString =
@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.210)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=TEST;Password=TEST123";
public void TestCallFuncProc()
{
// 建立数据库连接.
OracleConnection conn = new OracleConnection(connString);
// 打开连接.
conn.Open();
// 调用 Oracle 函数.
CallFunc(conn);
// 调用 Oracle 返回结果集的函数
CallFuncWithTable(conn);
// 调用存储过程
CallProcedure(conn);
// 关闭数据库连接.
conn.Close();
}
/// <summary>
/// 測试 调用 Oracle 函数.
/// </summary>
private void CallFunc(OracleConnection conn)
{
// 创建一个 Command.
OracleCommand testCommand = conn.CreateCommand();
// 定义须要运行的SQL语句.
testCommand.CommandText = "SELECT HelloWorldFunc() FROM dual";
// 运行SQL命令,结果存储到Reader中.
OracleDataReader testReader = testCommand.ExecuteReader();
// 处理检索出来的每一条数据.
while (testReader.Read())
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("调用函数:{0}; 返回:{1}",
testCommand.CommandText, testReader[0]
);
}
// 关闭Reader.
testReader.Close();
}
/// <summary>
/// 測试 调用 Oracle 返回结果集的函数.
/// </summary>
private void CallFuncWithTable(OracleConnection conn)
{
// 创建一个 Command.
OracleCommand testCommand = conn.CreateCommand();
// 定义须要运行的SQL语句.
testCommand.CommandText = "pkg_HelloWorld.getHelloWorld";
// 定义好,本次运行的类型,是存储过程.
testCommand.CommandType = CommandType.StoredProcedure;
// 定义好,我这个參数,是 游标 + 返回值.
OracleParameter para = new OracleParameter("c", OracleType.Cursor);
para.Direction = ParameterDirection.ReturnValue;
testCommand.Parameters.Add(para);
// 运行SQL命令,结果存储到Reader中.
OracleDataReader testReader = testCommand.ExecuteReader();
// 处理检索出来的每一条数据.
while (testReader.Read())
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("调用函数:{0}; 返回:{1} - {2}",
testCommand.CommandText, testReader[0], testReader[1]
);
}
// 关闭Reader.
testReader.Close();
}
/// <summary>
/// 測试运行存储过程.
/// </summary>
/// <param name="conn"></param>
private void CallProcedure(OracleConnection conn)
{
// 创建一个 Command.
OracleCommand testCommand = conn.CreateCommand();
// 定义须要运行的SQL语句.
testCommand.CommandText = "HelloWorld2";
// 定义好,本次运行的类型,是存储过程.
testCommand.CommandType = CommandType.StoredProcedure;
// 定义要查询的參数.
// 第一个參数,是输入的.
testCommand.Parameters.Add(new OracleParameter("p_user_name", "HeiHei"));
// 第2个參数,是输出的.
OracleParameter para2 = new OracleParameter("p_out_val", OracleType.VarChar, 10);
para2.Direction = ParameterDirection.Output;
testCommand.Parameters.Add(para2);
// 第3个參数,是既输入又输出的.
OracleParameter para3 = new OracleParameter("p_inout_val", OracleType.VarChar, 20);
para3.Direction = ParameterDirection.InputOutput;
para3.Value = "HAHA";
testCommand.Parameters.Add(para3);
// ExecuteNonQuery 方法,表明本次操作,不是一个查询的操作。将没有结果集合返回.
// 返回的数据,将是 被影响的记录数.
int insertRowCount = testCommand.ExecuteNonQuery();
// 存储过程运行完成后,取得 output 出来的数据.
String pa2 = testCommand.Parameters["p_out_val"].Value.ToString();
String pa3 = testCommand.Parameters["p_inout_val"].Value.ToString();
Console.WriteLine("调用 {0} 存储过程之后, p_out_val={1}; p_inout_val={2}", testCommand.CommandText, pa2, pa3);
}
}
}
C#调用 Oracle 存储过程样例代码的更多相关文章
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- 使用ffmpeg实现转码样例(代码实现)
分类: C/C++ 使用ffmpeg实现转码样例(代码实现) 使用ffmpeg转码主要工作如下: Demux -> Decoding -> Encoding -> Muxing 其中 ...
- java 线程、线程池基本应用演示样例代码回想
java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...
- ECharts组件应用样例代码
一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- java 又一次抛出异常 相关处理结果演示样例代码
java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
- java I/O进程控制,重定向 演示样例代码
java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...
- 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
随机推荐
- B树 B+树 红黑树
B-Tree(B树) 具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解. ...
- MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
- 20155225 实验一《Java开发环境的熟悉》实验报告
20155225 实验一<Java开发环境的熟悉>实验报告 一.命令行下Java程序的开发 按照老师提供的步骤,运行程序如下: 二.IDEA下Java程序开发.调试 设置条件断点如下: 三 ...
- ef查询mysql数据库数据支持DbFunctions函数
1.缘由 快下班的时候,一同事说在写linq查询语句时where条件中写两时间相减大于某具体天数报错:后来仔细一问,经抽象简化,可以总结为下面的公式: a.当前时间 减去 某表时间字段 大于 某具体天 ...
- **PHP错误Cannot use object of type stdClass as array in错误的
错误:将PHP对象类型当做了PHP数组 解决方法:用对象操作符-> 今天在PHP输出一个二维数组的时候,出现了“Fatal error: Cannot use object of type s ...
- C#socket编程序(二)
在上一篇中,我列了一些常用的方法,可以说这些方法是一些辅助性的方法,对于分析网络中的主机属性非常有用.在这篇中,我将会介绍一下面向连接(TCP)socket编程,其中辅以实例,代码可供下载. 对于TC ...
- Phoenix的安装使用与SQL查询HBase
一. Phoenix的简介 1. 什么是phoenix 现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天主要说Phoenix.phoen ...
- 实现nlp文本生成中的beam search解码器
自然语言处理任务,比如caption generation(图片描述文本生成).机器翻译中,都需要进行词或者字符序列的生成.常见于seq2seq模型或者RNNLM模型中. 这篇博文主要介绍文本生成解码 ...
- ASP.NET MVC之Ajax如影随行
一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...
- 【hihoCoder】#1513 : 小Hi的烦恼
题解 我会五维数点辣 只要用个bitset乱搞就好了 记录一下rk[i][j]表示第j科排名为i的是谁 用30000 * 5个大小为30000的bitset s[i][j]是一个bitset表示第j科 ...