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();
最后附三段代码:
--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(); }
相关文章推荐
- mybatis 调用 oracle 返回结果集 存储过程
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JAVA调用sqlserver存储过程的实现(返回多个结果集的实现)
- Oracle 存储过程调用 返回结果集 实现分页
- mybatis 调用oracle 存储过程并返回结果集
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- oracle中存储过程调用存储过程(带有返回结果集)
- 调用带参数的存储过程,并返回结果集--oracle
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- Oracle的存储过程返回结果集的简化办法
- Java调用SQL Server存储过程同时返回参数和结果集
- Oracle中返回结果集的存储过程
- ibatis 调用有返回集合的存储过程 oracle
- 在JDBC中调用SQL Server中的存储过程时出现异常:该语句没有返回结果集。
- Spring 调用ORACLE存储过程的结果集
- oracle如何在一个存储过程中调用另一个返回游标的存储过程
- oracle调用存储过程和函数返回结果集
- C#调用Oracle存储过程并返回结果集