﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-陋居-随笔分类-SQL</title><link>http://www.cppblog.com/softko/category/14213.html</link><description>淡薄名利,修身养性</description><language>zh-cn</language><lastBuildDate>Sat, 21 Aug 2010 02:04:22 GMT</lastBuildDate><pubDate>Sat, 21 Aug 2010 02:04:22 GMT</pubDate><ttl>60</ttl><item><title>为什么要用存储过程 (转)</title><link>http://www.cppblog.com/softko/archive/2010/08/20/124100.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Fri, 20 Aug 2010 07:36:00 GMT</pubDate><guid>http://www.cppblog.com/softko/archive/2010/08/20/124100.html</guid><wfw:comment>http://www.cppblog.com/softko/comments/124100.html</wfw:comment><comments>http://www.cppblog.com/softko/archive/2010/08/20/124100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/softko/comments/commentRss/124100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/softko/services/trackbacks/124100.html</trackback:ping><description><![CDATA[<p style="text-align: center;">为什么要用存储过程&nbsp;</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;">&nbsp;</p>
<p>几个去 IBM 面试的兄弟回来抱怨：去了好几个不同的 IBM
项目组，几乎每个面试官问到数据库的时候都要问用没用过存储过程，烦人不？大家去面的程序员，又不是
DBA，以前的项目都没有用到存储，不照样运行的好好的？</p>
<p>存储过程真的那么重要吗，它到底有什么好处呢？</p>
<p>笔者认为，存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。</p>
<p>但是存储过程处理比较复杂的业务时比较实用。<br>比如说，一个复杂的数据操作。如果你在前台
处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优势。<br>也就是说存储过程可以给我们带来运行效率
提高的好处。<br>另外，程序容易出现 BUG
不稳定，而存储过程，只要数据库不出现问题，基本上是不会出现什么问题的。也就是说从安全上讲，使用了存储过程的系统更加稳定。</p>
<p>数据量小的，或者和钱没关系的项目不用存储过程也可以正常运作。mysql
的存储过程还有待实际测试。如果是正式项目，建议你用 sql server 或 oracle
的存储过程。数据与数据之间打交道的话，过程会比程序来的快的多。面试官问有没有用存储，实际上就是想知道前来面试的程序员到底做过数据量大的项目没。如
果是培训出来的，或者小项目小公司出来的，对存储肯定接触的少了。</p>
<p>所以，要想进大公司，没有丰富存储过程经验，是不行的。</p>
那么什么时候才可以用存储？对于数据量不是很大以及业务处理不是很复杂的小项目就无需要了么？<br>错。
存储过程不仅仅适用于大型项目，对于中小型项目，使用存储过程也是非常有必要的。其威力和优势主要体现在：<br>&nbsp;
1.存储过程只在创造时进行编译，以后每次执行存储过程都不需再重新编译，而一般 SQL
语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。<br>&nbsp; 2.当对数据库进行复杂操作时(如对多个表进行
Update,Insert,Query,Delete
时），可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作，如果用程序来完成，就变成了一条条的&nbsp;SQL
语句，可能要多次连接数据库。而换成存储，只需要连接一次数据库就可以了。<br>&nbsp; 3.存储过程可以重复使用,可减少数据库开发人员的工作量。<br>&nbsp;
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
<br><img src ="http://www.cppblog.com/softko/aggbug/124100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/softko/" target="_blank">eircQ</a> 2010-08-20 15:36 <a href="http://www.cppblog.com/softko/archive/2010/08/20/124100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CString,int,string,char*之间的转换(转)</title><link>http://www.cppblog.com/softko/archive/2010/07/21/120962.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Wed, 21 Jul 2010 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/softko/archive/2010/07/21/120962.html</guid><wfw:comment>http://www.cppblog.com/softko/comments/120962.html</wfw:comment><comments>http://www.cppblog.com/softko/archive/2010/07/21/120962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/softko/comments/commentRss/120962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/softko/services/trackbacks/120962.html</trackback:ping><description><![CDATA[<p><strong> CString,int,string,char*之间的转换</strong> </p>
<p><br>
《C++标准函数库》中说的</p>
<p>有三个函数可以将字符串的内容转换为字符数组和C—string&nbsp;<wbr></p>
<p>1.data(),返回没有&#8221;\0&#8220;的字符串数组&nbsp;<wbr></p>
<p>2,c_str()，返回有&#8221;\0&#8220;的字符串数组&nbsp;<wbr></p>
<p>3，copy()</p>
<p>
.................................................................</p>
<p>int 转 CString：</p>
<p>CString.Format("%d",int);</p>
<p>...............................</p>
<p>string 转 CString&nbsp;<wbr></p>
<p>CString.format("%s", string.c_str());&nbsp;<wbr></p>
<p>用c_str()确实比data()要好.&nbsp;<wbr></p>
<p>.......................................</p>
<p>char* 转 CString&nbsp;<wbr></p>
<p>CString.format("%s", char*);&nbsp;<wbr></p>
<p>&nbsp;<wbr>CString strtest;&nbsp;<wbr></p>
<p>&nbsp;<wbr>char * charpoint;&nbsp;<wbr></p>
<p>&nbsp;<wbr>charpoint="give string a
value";&nbsp;<wbr></p>
<p>&nbsp;<wbr>strtest=charpoint; //直接付值</p>
<p>
...................................................................</p>
<p>CString 转 int</p>
<p>&nbsp;<wbr>CString&nbsp;<wbr>
ss="1212.12";&nbsp;<wbr></p>
<p>&nbsp;<wbr>int temp=atoi(ss); //atoi _atoi64或atol</p>
<p>&nbsp;<wbr></p>
<p>将字符转换为整数，可以使用atoi、_atoi64或atol。&nbsp;<wbr></p>
<p>int int_chage = atoi((lpcstr)ss) ;</p>
<p>或：</p>
<p>&nbsp;<wbr>&nbsp;<wbr> CString str = "23";</p>
<p>&nbsp;<wbr>&nbsp;<wbr> UINT uint;</p>
<p>&nbsp;<wbr>&nbsp;<wbr> sscanf(str, "%d",
uint);</p>
<p>..............................</p>
<p>string 转 int</p>
<p>..............................</p>
<p>char* 转 int</p>
<p>&nbsp;<wbr>#include
&lt;stdlib.h&gt;</p>
<p>&nbsp;<wbr></p>
<p>&nbsp;<wbr>int atoi(const char *nptr);</p>
<p>&nbsp;<wbr>long atol(const char *nptr);</p>
<p>&nbsp;<wbr>long long atoll(const char *nptr);</p>
<p>&nbsp;<wbr>long long atoq(const char *nptr);</p>
<p>
...................................................................</p>
<p>CString 转 string</p>
<p>&nbsp;<wbr> string
s(CString.GetBuffer());&nbsp;<wbr></p>
<p>&nbsp;<wbr>
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.&nbsp;<wbr></p>
<p>..........................................</p>
<p>int 转 string</p>
<p>..........................................</p>
<p>char* 转 string&nbsp;<wbr></p>
<p>&nbsp;<wbr>string s(char *);&nbsp;<wbr></p>
<p>&nbsp;<wbr>你的只能初始化，在不是初始化的地方最好还是用assign().</p>
<p>
...................................................................</p>
<p>CString 转 char *</p>
<p>&nbsp;<wbr>CString strtest="wwwwttttttt";</p>
<p>
&nbsp;<wbr>charpoint=strtest.GetBuffer(strtest.GetLength());</p>
<p>CString转换 char[100]&nbsp;<wbr></p>
<p>&nbsp;<wbr>char a[100];&nbsp;<wbr></p>
<p>&nbsp;<wbr>CString str("aaaaaa");&nbsp;<wbr></p>
<p>&nbsp;<wbr>strncpy(a,(LPCTSTR)str,sizeof(a));</p>
<p>&nbsp;<wbr> CString&nbsp;<wbr>
str="aaa";&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr> char*&nbsp;<wbr>
ch;&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr> ch=(char*)(LPCTSTR)str;</p>
<p>..........................................</p>
<p>int 转 char *</p>
<p>&nbsp;<wbr>在stdlib.h中有个函数itoa()</p>
<p>&nbsp;<wbr>itoa的用法：</p>
<p>&nbsp;<wbr>itoa(i,num,10);</p>
<p>&nbsp;<wbr>i 需要转换成字符的数字</p>
<p>&nbsp;<wbr>num 转换后保存字符的变量</p>
<p>&nbsp;<wbr>10
转换数字的基数（进制）10就是说按照10进制转换数字。还可以是2，8，16等等你喜欢的进制类型</p>
<p>&nbsp;<wbr>原形：char *itoa(int value, char* string, int
radix);</p>
<p>&nbsp;<wbr>实例：</p>
<p>&nbsp;<wbr>#include "stdlib.h"</p>
<p>&nbsp;<wbr>#include "stdio.h"</p>
<p>&nbsp;<wbr>main()</p>
<p>&nbsp;<wbr>{</p>
<p>&nbsp;<wbr>int i=1234;</p>
<p>&nbsp;<wbr>char s[5];</p>
<p>&nbsp;<wbr>itoa(i,s,10);</p>
<p>&nbsp;<wbr>printf("%s",s);</p>
<p>&nbsp;<wbr>getchar();</p>
<p>}</p>
<p>..........................................</p>
<p>string 转 char *&nbsp;<wbr></p>
<p>char *p = string.c_str();&nbsp;<wbr></p>
<p>&nbsp;<wbr></p>
<p>&nbsp;<wbr>string aa("aaa");</p>
<p>&nbsp;<wbr>char *c=aa.c_str();</p>
<p>&nbsp;<wbr>string mngName；</p>
<p>&nbsp;<wbr>char t[200];</p>
<p>&nbsp;<wbr>memset(t,0,200);</p>
<p>&nbsp;<wbr>strcpy(t,mngName.c_str());</p>
<p>
...................................................................</p>
<p>标准C里没有string,char *==char []==string</p>
<p>可以用CString.Format("%s",char *)这个方法来将char
*转成CString。要把CString转成char *，用操</p>
<p>作符（LPCSTR）CString就可以了。</p>
<p>cannot convert from 'const char *' to 'char *'</p>
<p>const char *c=aa.c_str();&nbsp;<wbr></p>
<p>string.c_str()只能转换成const char *</p>
<p>&nbsp;<wbr></p>
<p><br>
<strong> c++中char * 和 char []的区别</strong> </p>
<p>问题引入：<br>
同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的，而后者完全正确。<br>
程序演示：测试环境Devc++<br>
代码<br>
#include &lt;iostream&gt;<br>
using namespace std;</p>
<p>main()<br>
{<br>
&nbsp;<wbr>&nbsp;<wbr> char *c1 = "abc";<br>
&nbsp;<wbr>&nbsp;<wbr> char c2[] = "abc";<br>
&nbsp;<wbr>&nbsp;<wbr> char *c3 = ( char*
)malloc(3);<br>
&nbsp;<wbr>&nbsp;<wbr> c3 = "abc";<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c1,c1,c1);<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c2,c2,c2);<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c3,c3,c3);<br>
&nbsp;<wbr>&nbsp;<wbr> getchar();<br>
}&nbsp;<wbr>&nbsp;<wbr><br>
运行结果<br>
2293628 4199056 abc<br>
2293624 2293624 abc<br>
2293620 4199056 abc</p>
<p>参考资料：<br>
首先要搞清楚编译程序占用的内存的分区形式：<br>
一、预备知识—程序的内存分配<br>
一个由c/C++编译的程序占用的内存分为以下几个部分<br>
1、栈区（stack）—由编译器自动分配释放，存放函数的参数值，局部变量的值等。其操作方式类似于</p>
<p>数据结构中的栈。<br>
2、堆区（heap）—一般由程序员分配释放，若程序员不释放，程序结束时可能由OS回收。注意它与数据</p>
<p>结构中的堆是两回事，分配方式倒是类似于链表，呵呵。<br>
3、全局区（静态区）（static）—全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态</p>
<p>变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统</p>
<p>释放。<br>
4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。<br>
5、程序代码区<br>
这是一个前辈写的，非常详细<br>
//main.cpp<br>
&nbsp;<wbr> int
a=0;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
//全局初始化区<br>
&nbsp;<wbr> char *p1;&nbsp;<wbr>&nbsp;<wbr>
//全局未初始化区<br>
&nbsp;<wbr> main()<br>
&nbsp;<wbr> {<br>
&nbsp;<wbr>&nbsp;<wbr> int b;栈<br>
&nbsp;<wbr>&nbsp;<wbr> char
s[]="abc";&nbsp;<wbr>&nbsp;<wbr> //栈<br>
&nbsp;<wbr>&nbsp;<wbr> char
*p2;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
//栈<br>
&nbsp;<wbr>&nbsp;<wbr> char
*p3="123456";&nbsp;<wbr>&nbsp;<wbr>
//123456\0在常量区，p3在栈上。<br>
&nbsp;<wbr>&nbsp;<wbr> static int
c=0；&nbsp;<wbr>&nbsp;<wbr> //全局（静态）初始化区<br>
&nbsp;<wbr>&nbsp;<wbr> p1 = (char*)malloc(10);<br>
&nbsp;<wbr>&nbsp;<wbr> p2 =
(char*)malloc(20);&nbsp;<wbr>&nbsp;<wbr>
//分配得来得10和20字节的区域就在堆区。<br>
&nbsp;<wbr>&nbsp;<wbr>
strcpy(p1,"123456");&nbsp;<wbr>&nbsp;<wbr>
//123456\0放在常量区，编译器可能会将它与p3所向"123456"优化成一个</p>
<p>地方。<br>
}<br>
二、堆和栈的理论知识<br>
2.1申请方式<br>
stack:<br>
由系统自动分配。例如，声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间<br>
heap:<br>
需要程序员自己申请，并指明大小，在c中malloc函数<br>
如p1=(char*)malloc(10);<br>
在C++中用new运算符<br>
如p2=(char*)malloc(10);<br>
但是注意p1、p2本身是在栈中的。<br>
2.2<br>
申请后系统的响应<br>
栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。<br>
堆：首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时，<br>
会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将</p>
<p>该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大</p>
<p>小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正</p>
<p>好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。<br>
2.3申请大小的限制<br>
栈：在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地</p>
<p>址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译</p>
<p>时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间</p>
<p>较小。<br>
堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地</p>
<p>址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的</p>
<p>虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。<br>
2.4申请效率的比较：<br>
栈:由系统自动分配，速度较快。但程序员是无法控制的。<br>
堆:是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便.<br>
另外，在WINDOWS下，最好的方式是用Virtual Alloc分配内存，他不是在堆，也不是在栈,而是直接在进</p>
<p>程的地址空间中保留一块内存，虽然用起来最不方便。但是速度快，也最灵活。<br>
2.5堆和栈中的存储内容<br>
栈：在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的</p>
<p>地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变</p>
<p>量。注意静态变量是不入栈的。<br>
当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主</p>
<p>函数中的下一条指令，程序由该点继续运行。<br>
堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。<br>
2.6存取效率的比较<br>
char s1[]="aaaaaaaaaaaaaaa";<br>
char *s2="bbbbbbbbbbbbbbbbb";<br>
aaaaaaaaaaa是在运行时刻赋值的；<br>
而bbbbbbbbbbb是在编译时就确定的；<br>
但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。<br>
比如：<br>
#include<br>
voidmain()<br>
{<br>
char a=1;<br>
char c[]="1234567890";<br>
char *p="1234567890";<br>
a = c[1];<br>
a = p[1];<br>
return;<br>
}<br>
对应的汇编代码<br>
10:a=c[1];<br>
004010678A4DF1movcl,byteptr[ebp-0Fh]<br>
0040106A884DFCmovbyteptr<wbr>[ebp-4],cl<br>
11:a=p[1];<br>
0040106D8B55ECmovedx,dwordptr[ebp-14h]<br>
004010708A4201moval,byteptr[edx+1]<br>
004010738845FCmovbyteptr<wbr>[ebp-4],al<br>
第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据</p>
<p>edx读取字符，显然慢了。<br>
2.7小结：<br>
堆和栈的区别可以用如下的比喻来看出：<br>
使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会</p>
<p>切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。<br>
使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大。</p>
<p>自我总结：<br>
char *c1 = "abc";实际上先是在文字常量区分配了一块内存放"abc",然后在栈上分配一地址给c1并指向</p>
<p>这块地址，然后改变常量"abc"自然会崩溃</p>
<p>然而char c2[] = "abc",实际上abc分配内存的地方和上者并不一样，可以从<br>
4199056<br>
2293624 看出，完全是两块地方，推断4199056处于常量区，而2293624处于栈区</p>
<p>2293628<br>
2293624<br>
2293620 这段输出看出三个指针分配的区域为栈区，而且是从高地址到低地址</p>
<p>2293620 4199056 abc 看出编译器将c3优化指向常量区的"abc"</p>
<p><br>
继续思考：<br>
代码：<br>
#include &lt;iostream&gt;<br>
using namespace std;</p>
<p>main()<br>
{<br>
&nbsp;<wbr>&nbsp;<wbr> char *c1 = "abc";<br>
&nbsp;<wbr>&nbsp;<wbr> char c2[] = "abc";<br>
&nbsp;<wbr>&nbsp;<wbr> char *c3 = ( char*
)malloc(3);<br>
&nbsp;<wbr>&nbsp;<wbr> //&nbsp;<wbr> *c3 =
"abc" //error<br>
&nbsp;<wbr>&nbsp;<wbr> strcpy(c3,"abc");<br>
&nbsp;<wbr>&nbsp;<wbr> c3[0] = 'g';<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c1,c1,c1);<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c2,c2,c2);<br>
&nbsp;<wbr>&nbsp;<wbr> printf("%d %d
%s\n",&amp;c3,c3,c3);<br>
&nbsp;<wbr>&nbsp;<wbr> getchar();<br>
}&nbsp;<wbr>&nbsp;<wbr><br>
输出：<br>
2293628 4199056 abc<br>
2293624 2293624 abc<br>
2293620 4012976 gbc<br>
写成注释那样，后面改动就会崩溃<br>
可见strcpy(c3,"abc");abc是另一块地方分配的，而且可以改变，和上面的参考文档说法有些不一定，</p>
<br><img src ="http://www.cppblog.com/softko/aggbug/120962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/softko/" target="_blank">eircQ</a> 2010-07-21 14:48 <a href="http://www.cppblog.com/softko/archive/2010/07/21/120962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>七种数据库中Select Top的用法(转)</title><link>http://www.cppblog.com/softko/archive/2010/07/21/120960.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Wed, 21 Jul 2010 06:32:00 GMT</pubDate><guid>http://www.cppblog.com/softko/archive/2010/07/21/120960.html</guid><wfw:comment>http://www.cppblog.com/softko/comments/120960.html</wfw:comment><comments>http://www.cppblog.com/softko/archive/2010/07/21/120960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/softko/comments/commentRss/120960.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/softko/services/trackbacks/120960.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em;">现在用oracle  ，PL Sql中顺手写了个 select top 1 *
from .....出错提示末找到要求的关键字。。</p>
<p style="text-indent: 2em;">发现和SQL Server还不一样。G一下原来是这样：</p>
<p style="text-indent: 2em;"> </p>
<p style="text-indent: 2em;">Select Top在不同数据库中的使用用法：</p>
<p style="text-indent: 2em;">1. Oracle数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT * FROM TABLE1 WHERE ROWNUM&lt;=N</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">2. Infomix数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT FIRST N * FROM TABLE1</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">3. DB2数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM&lt;=N</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">或者</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">4. SQL Server数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT TOP N * FROM TABLE1</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">5. Sybase数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SET ROWCOUNT N <br>GO<br>SELECT * FROM TABLE1</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">6. MySQL数据库</p>
<center><ccid_nobr></ccid_nobr>
<table bordercolorlight="#000000" bordercolordark="#ffffff" width="400" align="center" border="1" cellpadding="2" cellspacing="0">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" class="code" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>SELECT * FROM TABLE1 LIMIT N</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em;">7. FoxPro数据库</p>
<ccid_nobr></ccid_nobr>
<pre><ccid_code></ccid_code>SELECT * TOP N FROM TABLE ORDER BY COLUMN</pre>
<br><img src ="http://www.cppblog.com/softko/aggbug/120960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/softko/" target="_blank">eircQ</a> 2010-07-21 14:32 <a href="http://www.cppblog.com/softko/archive/2010/07/21/120960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DateTime类型的转换</title><link>http://www.cppblog.com/softko/archive/2010/07/12/120122.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Mon, 12 Jul 2010 07:17:00 GMT</pubDate><guid>http://www.cppblog.com/softko/archive/2010/07/12/120122.html</guid><wfw:comment>http://www.cppblog.com/softko/comments/120122.html</wfw:comment><comments>http://www.cppblog.com/softko/archive/2010/07/12/120122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/softko/comments/commentRss/120122.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/softko/services/trackbacks/120122.html</trackback:ping><description><![CDATA[写入时间值 <br> COleDateTime &nbsp; oleDate &nbsp; = &nbsp; COleDateTime::GetCurrentTime(); <br>
_variant_t &nbsp; vtFld; <br> vtFld.vt &nbsp; = &nbsp; VT_DATE; <br> vtFld.date &nbsp; = &nbsp;
oleDate; <br> pRecordSet4-&gt; PutCollect( "date ", &nbsp; vtFld);<br><br>关于时间类型的几种转换 <br> strCString= "2003-10-27 &nbsp; 6:24:37 "; &nbsp; //CString---&gt;
COleDateTime <br> COleVariant &nbsp; vtime(strCString); <br>
vtime.ChangeType(VT_DATE); <br> COleDateTime &nbsp; time4=vtime; <br>  <br>
COleDateTime &nbsp; time1(1977,4,16,2,2,2); &nbsp; //COleDataTime---&gt; CTime <br>
SYSTEMTIME &nbsp; systime; <br> VariantTimeToSystemTime(time1, &nbsp;
&amp;systime); <br> CTime &nbsp; tm(systime); <br>  <br> time_t &nbsp;
time2=tm.GetTime(); &nbsp; //CTime---&gt; time_t <br> COleDateTime &nbsp;
time3(time2); &nbsp; //time_t---&gt; COleDateTime<br>
<br><img src ="http://www.cppblog.com/softko/aggbug/120122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/softko/" target="_blank">eircQ</a> 2010-07-12 15:17 <a href="http://www.cppblog.com/softko/archive/2010/07/12/120122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>