SQLServer和ORACLE 存儲過程的調用(返回結果集)

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();

 

 

最後附三段代碼:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章