C#中如何把Oracle数据库查询的结果集返回

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何把Oracle数据库查询的结果集返回相关的知识,希望对你有一定的参考价值。

小弟刚学C#操作Oracle是这样的:
public String Connole(String txtcomm)


Read();
String txtco = "provider = MSDAORA.1 ;Data Source= '" + this.server + "' ; " +
"Password= '" + this.password + "' ;User ID= '" + user + "' ;Unicode=True ";

OleDbConnection Conn = new OleDbConnection(txtco);

OleDbDataAdapter Daper = new OleDbDataAdapter(txtcomm, Conn);

DataTable Dta = new DataTable();

Daper.Fill(Dta);

return Dta.ToString();



上面是写的一个连接数据库的类(Class1)的一个方法(封装成Dll),然后我想在窗体中进行调用实现:传入Sql语句返回查询的结果集。代码如下:
public Conndll.Class1 Conne = new Class1();

public DataTable dt = new DataTable();
private void button1_Click(object sender, EventArgs e)

this.dt = Conne.Connole("Select * from b.c");//调用Dll
if (this.dt.Rows.Count > 0)

MessageBox.Show("OK");

else

MessageBox.Show("NO");
return;

可是调用的时候报错:无法将类型String隐式的转换为System.Data.DataTable
请问:怎么修改上面的代码能够实现上面的功能?传入Sql语句返回查询的结果集代码。急用呀帮帮忙呀!!!

1、首先通过DLL方式进行连接数据库, 也是一个比较通用的方式,项目引入后,即可使用,非常方便,使用之前如有把封装的DLL文件引入自己的项目中,项目里就可以直接调用。

2、可以通过System.Data.oracleClient方式进行连接数据库,查询相关数据,连接前需要在oracle客户端进行配置连接数据服务地址(tnsnames.ora)。

3、也是通过System.Data.oracleClient方式进行连oracle数据库,但是不要进行配置tnsnames.ora文件。

4、最后还可以通过ODP方式进行连接oracle数据库,odp是oracle公司提供的数据库访问类库,如下图所示就完成了。

参考技术A return Dta.ToString();
会把Dta的类型转化为一个字符串输出,你再将字符串赋给DataTable,当然会报错。把前面函数返回值设成DataTable,返回是dta,不是dta.tostring()

public DataTable Connole(String txtcomm)

//这里省略
return Dta ;


报错的时候要常试去理解一下错误信息,String隐式的转换为System.Data.DataTable,说明程序中你有将String 类型的变量赋给DataTable本回答被提问者采纳
参考技术B 你的方法返回类型写错了,改成这样:
public DataTable Connole(String txtcomm)

....

return Dta;

oracle 存储过程,数据处理并返回结果集问题

我想写个oracle 的存储过程,实现功能如下: 查询表的内容,选出符合条件的子集,同时对这个子集的内容作更新字段, 最后返回操作的结果集。ps : 我昨天使用临时表放缓存结果是可以实现的。 如果加临时表, 又要维护这个临时表,项目限制,不想这么做。以前使用SQL server 实现超简单。 oracle 没怎么接触过,有什么好的思路? 不一定要贴代码, 给个思路就OK!

参考技术A oracle 也有临时表的概念,我不知道你以前用sql server的时候建立的那个临时表是虚拟的,还是实体表出现在库里。oracle 有虚拟临时表的东西,是
with aa as sql1() ,
bb as sql2() 然后后面就可以select * from sql1,sql2 where XXX了。追问

按照你的用法, 我可以 用 OUT 游标参数 open for select * aa , 然后返回结果吗?

追答

用我这个方法就不在用游标了,当然游标来循环也是可以的,方法有很多,看你怎么选择了~

参考技术B oracle 可以 返回游标。

你搜索一下: oracle return cursor

我也没有用过。
参考技术C set serveroutput on
dbms_output
参考技术D 用SQL server实现超简单是怎么实现?追问

在存储过程里面 搞个临时表, 做完处理直接select 临时表内容就可以了啊。 不需要 在外面create一个临时表的。

追答

我还是不太理解你的需求。
感觉直接open cursor返回record就可以了啊。
要不你把sqlserver的代码贴出来看看?

追问

类似:
begin
create table #temp (aa int)
declare @crsrGroup cursor
set @crsrGroup = cursor for select GroupName from wt_group
//操作略

close @crsrGroup
select * from #temp
end

追答

Declare
TYPE EMP_RECORD_TYPE IS RECORD(
AA NUMBER);
EMP_RECORD EMP_RECORD_TYPE;
TYPE EMP_TABLE_TYPE IS TABLE OF EMP_RECORD_TYPE INDEX BY PLS_INTEGER;
EMP_TABLE EMP_TABLE_TYPE;
BEGIN

SELECT GROUPNAME BULK COLLECT INTO EMP_TABLE FROM WT_GROUP;
FOR I IN 1 .. EMP_TABLE.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(EMP_TABLE(I).AA);
END LOOP;;
END;

追问

我要写的过程大致是下面这样, 你那个好像是把结果打印到控制台呀。

追答

你说最后返回操作的结果集,你的例子里也没有返回的例子,,所以你最终要返回什么?

追问

cur_arg 返回游标, 前台不是能取到数据吗?

本回答被提问者采纳

以上是关于C#中如何把Oracle数据库查询的结果集返回的主要内容,如果未能解决你的问题,请参考以下文章

C#中使用Oracle存储过程返回结果集

C# 调用一个方法,内有一个参数,执行SQL查询语句,并将结果返回,该方法如何写?

如何oracle function 返回结果集

C# 存储过程 如何返回 tatatable

如何使从 oracle 返回的结果集保持其列别名字符大小写

oracle 如何把同一个表的同一个字段按条件分成不同的字段查询出来结果集?例如: