仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 925|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之取得了局

[复制链接]
透明 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-16 22:26:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在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再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。
莫相离 该用户已被删除
7#
发表于 2015-3-22 17:21:16 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
因胸联盟 该用户已被删除
6#
发表于 2015-3-15 22:29:47 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
只想知道 该用户已被删除
5#
发表于 2015-3-8 11:58:02 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
admin 该用户已被删除
地板
发表于 2015-2-26 04:13:03 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
蒙在股里 该用户已被删除
板凳
发表于 2015-2-8 20:17:52 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-25 16:34:58 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
不帅 该用户已被删除
楼主
发表于 2015-1-19 12:45:19 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-22 16:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表