惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
量子位
博客园_首页
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Forbes - Security
Forbes - Security
IT之家
IT之家
N
News and Events Feed by Topic
S
Security Affairs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Webroot Blog
Webroot Blog
Recorded Future
Recorded Future
L
LangChain Blog
Y
Y Combinator Blog
AI
AI
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google Online Security Blog
Google Online Security Blog
V2EX - 技术
V2EX - 技术
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
I
Intezer
T
Tenable Blog
G
Google Developers Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
有赞技术团队
有赞技术团队
O
OpenAI News
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
Blog — PlanetScale
Blog — PlanetScale

博客园 - wljcan

用户中心 - 博客园 FMEFB开始上传 代码实现的事件响应 UIAlertView的使用方法 开始新的学习历程--ios开发 nod32 制作的手机电子书UMD文件编辑器 关于IOC 精彩的讨论《数据库时代的终结 》 使用NHibernate时需要考虑的另一个问题 关于crystal report和NHibernate应用的一个问题 使用NHibernate时,如何提高访问Oracle数据库(ODP.net)的性能 在Google 上搜书的方法 (转) - wljcan 一个NHibernate的好工具---Query Analyzer 在PowerDesigner中生成SQL脚本时,如何生成备注信息? 北京公司招聘 .net开发人员 ArrayList中的排序 .net使用Com组件的问题 应用中的安全管理方案
Oracle开发中,关于查询的一个问题
wljcan · 2005-05-18 · via 博客园 - wljcan

今天运行单元测试的时候,有一段突然出现问题,测试代码大致如下:

 1    [Test]
 2        public void TestSelectSql()
 3        {
 4            try
 5            {
 6                //创建临时表
 7                DBFactorySingleton.GetInstance().ExecuteSql("create table testSql (id int,name varchar(20)) ");
 8            }

 9            catch(Exception)
10            {
11                //删除临时数据
12                DBFactorySingleton.GetInstance().ExecuteSql("drop table testSql ");
13                //创建临时表
14                DBFactorySingleton.GetInstance().ExecuteSql("create table testSql (id int,name varchar(20)) ");
15
16            }

17            
18            //插入数据
19            DBFactorySingleton.GetInstance().ExecuteSql("insert into testSql values(1,'10')");
20            DBFactorySingleton.GetInstance().ExecuteSql("insert into testSql values(2,'20')");
21
22            string selectSql="select * from testSql";
23            //查询数据
24            IDataReader read= DBFactorySingleton.GetInstance().SelectSql(selectSql);
25            Assert.IsNotNull(read);
26
27            read.Read();
28            Assert.AreEqual( read[0].ToString(),"1");
29            Assert.AreEqual( read[1].ToString(),"10");
30
31            read.Read();
32            Assert.AreEqual( read[0].ToString(),"2");
33            Assert.AreEqual( read[1].ToString(),"20");
34
35            Assert.IsFalse( read.Read());   //只有两条记录
36            read.Close();
37    //添加一列 
38            DBFactorySingleton.GetInstance().ExecuteSql("alter table testSql add testcolumn int");
39
40            
41            //查询数据
42            read= DBFactorySingleton.GetInstance().SelectSql(selectSql);
43            Assert.IsNotNull(read);
44
45            
46            read.Read();
47            Assert.AreEqual(3,read.FieldCount) ;
48            
49            read.Close();
50//删除临时数据
51            DBFactorySingleton.GetInstance().ExecuteSql("drop table testSql ");
52        }

问题出现在第47行,即先执行某查询,然后添加字段,再次查询出来的结果中 字段数量不变!

这个unit在Sqlserver中测试是没有问题的,为什么在Oracle中就不行了呢?

开始的时候,以为Oracel的Connection缓存的原因,于是在ODP.net的连接字符串中加入Pooling=false,不使用连接池,但测试还是不通过。
即然与连接池无关,那就可能是查询本身的问题,突然想到原来在做Oracle优化时候的一个原则:尽量执行同样的SQL语句。 是否与这有关呢?
在第40行加入:
selectSql="select * from testSql ";  //后面加一空格
再次运行,测试通过!

总结:在Oracle中,同样的Sql语句在查询的时候性能会更高,但如果修改了表结构,查询结果中的表格保持不变。