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数据库查询的结果集返回的主要内容,如果未能解决你的问题,请参考以下文章