c# 操作临时,先往临时表中写数据,然后再查询的时候查不到,请问哪里的问题?

时间:2022-09-15 23:45:31
数据库中建立的是会话级的临时表 on commit preserve rows;

然后先写入数据
OracleConnection conn = new OracleConnection(@"Data Source=ORCL121;User ID=ARMANAGEDB0000;Password=ARMANAGEDB0000");
            conn.Open();
            OracleCommand cmd = conn.CreateCommand();
            cmd.CommandText = getInsertTmpSql();
            int i_result = cmd.ExecuteNonQuery();

断点看了  i_result 是大于0的

然后查询数据
cmd.CommandText = reportSql;
                    OracleDataAdapter oda = new OracleDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    oda.Fill(dt);

conn和cmd都没有变,跟写入数据时用的是相同的实例,断点看了dt的size是0,在数据中执行上面的两个sql时是可以查到数据,放到代码中执行不知道哪里出的问题,请帮助解答一下~~

9 个解决方案

#1


不是同一个会话吧

#2


为什么会不是用一个会话呢?  哪里的问题

#3


检查下是否是查询的时候重新打开连接,和插入时用的不是同一个会话。临时表的数据只对当前会话可见

#4


你看我贴的那段代码,cmd和conn没有变过,两个操作唯一的差别是 cmd.CommandText 变了    

#5


C#代码我不熟悉。会话级的临时表,如果你确认往表里插入记录成功,那么查不出数据应该从会话上入手

#6


LZ 把次拼接出来的 SQL 语句都贴出来。

#7


自己回答一下,其实已经查到了,代码这么写没有问题。
只能说vs2010有点坑,我在查看dataset时,里面有个count属性一直是0,让我误以为没有查到数据,唉,不知道怎么设计的

#8


不错,问题解决了贴出答案供别人参考,赞一个

#9


引用 7 楼 finalsyo 的回复:
自己回答一下,其实已经查到了,代码这么写没有问题。
只能说vs2010有点坑,我在查看dataset时,里面有个count属性一直是0,让我误以为没有查到数据,唉,不知道怎么设计的


DataSet 的count 不行,你得查 DataTable的 Rows.Count 才可以。

#1


不是同一个会话吧

#2


为什么会不是用一个会话呢?  哪里的问题

#3


检查下是否是查询的时候重新打开连接,和插入时用的不是同一个会话。临时表的数据只对当前会话可见

#4


你看我贴的那段代码,cmd和conn没有变过,两个操作唯一的差别是 cmd.CommandText 变了    

#5


C#代码我不熟悉。会话级的临时表,如果你确认往表里插入记录成功,那么查不出数据应该从会话上入手

#6


LZ 把次拼接出来的 SQL 语句都贴出来。

#7


自己回答一下,其实已经查到了,代码这么写没有问题。
只能说vs2010有点坑,我在查看dataset时,里面有个count属性一直是0,让我误以为没有查到数据,唉,不知道怎么设计的

#8


不错,问题解决了贴出答案供别人参考,赞一个

#9


引用 7 楼 finalsyo 的回复:
自己回答一下,其实已经查到了,代码这么写没有问题。
只能说vs2010有点坑,我在查看dataset时,里面有个count属性一直是0,让我误以为没有查到数据,唉,不知道怎么设计的


DataSet 的count 不行,你得查 DataTable的 Rows.Count 才可以。