您的位置:首页 > 数据库 > Oracle

SQLServer和ORACLE 存储过程的调用(返回结果集)

2011-06-10 16:26 567 查看
SQLServer相比Oracle是很随便的,存储过程里select * from tb 就能返回一个结果集出来。在C#里调用时,能exec proc直接出结果集。

--SQL中返回结果集的存储过程:

create proc retable(@i int)
as
begin
select * from a where id=@i
end

GO

//C#里调用存储过程返回结果集的一种简便方法:

String sql = "exec retable "+textBox1.Text;

如果C#里调用SQLServer其他存储过程,那格式和下面ORACLE差不多。

Oracle里返回结果集需要用到out sys_refcursor游标,用存储过程和包都可以。

--Oracle中返回结果集的存储过程:

create or replace procedure outputtable(i_n int,emp out sys_refcursor)
as
begin
open emp for
select * from testa where a=i_n;
end outputtable;

想查看结果的话也比较麻烦,需要在pl-sql中先test这个存储过程,填入参数,F8运行,然后去output的value右下角点...这个东西。

(还有一种输出的方法是在command window中运行,和sqlplus类似,得用dbms_output.put_line('hell world)或者print 变量,但是command window对游标的支持貌似有问题,无法定义?)

//在C#里调用Oracle存储过程返回结果集:

con.Open();
OracleCommand cmd = new OracleCommand("outputtable", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p1 = new OracleParameter("i_n", OracleType.Int32);
p1.Direction = System.Data.ParameterDirection.Input;
p1.Value = textBox1.Text;
OracleParameter p2 = new OracleParameter("emp", OracleType.Cursor);
p2.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "test");
DataTable dt = ds.Tables[0].Copy();
dataGridView1.DataSource = dt;
con.Close();

最后附三段代码:

private void button4_Click(object sender, EventArgs e) //EXEC sql proc
{
String str = "Server=LENOVO-12345;Database=test;Trusted_Connection=yes;";
SqlConnection con = new SqlConnection(str);

String sql = "exec retable "+textBox1.Text;

con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0].Copy();
dataGridView1.DataSource = dt;
con.Close();
}

private void button6_Click(object sender, EventArgs e) //ORACLE proc return 1 value
{
String str = "Server =10.10.10.100 ; Data Source = ds10;User ID = 100 ;Password = 100";
OracleConnection con = new OracleConnection(str);

OracleCommand cmd = new OracleCommand("abcdefgh", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p1 = new OracleParameter("i_n", OracleType.Int32);
p1.Direction = System.Data.ParameterDirection.Input;
p1.Value = textBox1.Text;
OracleParameter p2 = new OracleParameter("o_n", OracleType.VarChar, 100);
p2.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
textBox2.Text = p2.Value.ToString();

}

private void button7_Click(object sender, EventArgs e) //ORACLE proc return cursor
{
String str = "Server =10.10.10.100 ; Data Source = ds10;User ID = 100 ;Password = 100";
OracleConnection con = new OracleConnection(str);

con.Open();
OracleCommand cmd = new OracleCommand("outputtable", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p1 = new OracleParameter("i_n", OracleType.Int32);
p1.Direction = System.Data.ParameterDirection.Input;
p1.Value = textBox1.Text;
OracleParameter p2 = new OracleParameter("emp", OracleType.Cursor);
p2.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "test");
DataTable dt = ds.Tables[0].Copy();
dataGridView1.DataSource = dt;
con.Close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: