透明 发表于 2015-1-16 22:26:49

MSSQL网页编程之取得了局

在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。取得了局
在本章中,我们来进修怎样取得SQL语句的实行了局。

我们称由查询前往的一组纪录为一个了局集(resultset)(或在VB中被称为recordset).检索了局一般分为以下几个步骤:
确认一个了局集是不是可用。将了局集的列绑定在得当的变量上。获得行
完成对了局集的操纵后,我们必需挪用SQLCloseCursor来烧毁它.
确认一个了局集是不是可用
偶然在实行SQL语句后,我们就已晓得了局集是不是可用了。假如实行的语句并非前往了局集的范例,我们就晓得了局集不成用了。但偶然我们不太分明利用的SQL语句是甚么范例,好比说,让用户自行输出SQL语句。这时候,我们必需确认是不是有了局集被创建,这能够经由过程SQLNumResultCols函数完成。假如了局集存在,则该函数前往了局会合的列数(字段数)。语法以下:

SQLNumResultColsprotoStatementHandle:DWORD,pNumCols:DWORD
StatementHandle语句句柄pNumCols指向一个双字的指针,个中包括了却果集的列数。
假如pNumCols指向的值为0,那末标明了局集不存在。
绑定列
与绑定一个变量到SQL语句的参数不异,我们毗连(绑定)一个变量到了局会合的某一列。这里要用到的函数是SQLBindCol,语法以下:

SQLBindColprotoStatementHandle:DWORD,
ColumnNumber:DWORD,
TargetType:DWORD,
TargetValuePtr:DWORD,
BufferLength:DWORD,
pStrLenOrIndPtr:DWORD
StatementHandle语句句柄ColumnNumber了局会合要绑定的列序数.列序数从1入手下手.列0是书签(bookmark)列.TargetTypeThe唆使TargetValuePtr指向的变量(缓冲区)的范例的常数。TargetValuePtr指向将要绑缚到列的变量或缓冲区的指针。当挪用SQLFetch来取得了局会合的行时,本参数指向的变量或缓冲区将被填进被绑定的列的值。BufferLength由TargetValuePtr指向的缓冲区的长度。pStrLenOrIndPtr拜见前章SQLBindParameter
例子:

.data?
bufferdb21dup(?)
DataLengthdd?;挪用SQLFetch后,被填进缓冲区的字符串的长度

.code
.....
invokeSQLBindCol,hStmt,1,SQL_C_CHAR,addrbuffer,21,addrDataLength
获得一行
十分复杂.先挪用SQLFetch检索了局集的一列到绑定的变量中。当SQLFetch挪用完成,游标(cursor)被更新(updated).能够以为游标就是一个纪录指针(recordpointer).它指了然SQLFetch挪用后将前往哪一行。好比说,假如了局集有4列,当了局集创建时,游标指向第一行.当挪用了SQLFetch后,游标被加1。以是假如挪用了SQLFetch4次,就没有更多的行可被提交了。游标会显现指向文件尾(EOF).SQLFetch语法以下:

SQLFetchprotoStatementHandle:DWORD

当没有行可提交时,这个函数前往SQL_NO_DATA.

例子:

.data?
bufferdb21dup(?)
DataLengthdd?

.code
.....
invokeSQLBindCol,hStmt,1,SQL_C_CHAR,addrbuffer,21,addrDataLength
invokeSQLFetch,hStmt







译者空话:还记得地球的经纬吗?我们经由过程SQLBindCol来定位经度(列),用游标来界说纬度(行),用SQLFetch来取得坐标,而了局集就是地球。年夜帆海时期2的同好们不该健忘呀!(船主,我们找不到水......特地问一句,这是地球吗%$#@&*^:-)
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。

不帅 发表于 2015-1-19 12:45:19

比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。

金色的骷髅 发表于 2015-1-25 16:34:58

代替了原来VB式的错误判断。比Oracle高级不少。

蒙在股里 发表于 2015-2-8 20:17:52

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

admin 发表于 2015-2-26 04:13:03

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

只想知道 发表于 2015-3-8 11:58:02

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

因胸联盟 发表于 2015-3-15 22:29:47

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

莫相离 发表于 2015-3-22 17:21:16

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
页: [1]
查看完整版本: MSSQL网页编程之取得了局