SQL Server单引号两种处理技巧

SQL Server单引号两种处理技巧

和数据库打交道要频繁地用到SQL 语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦S QL 语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL 语法不对,本人发现有两种方法可以解决和处理这种单引号的问题(以VB 为例子)。

方法一:

利用转义字符处理SQL 语句。下面的函数可以在执行SQL 语句前调用, 执行处理后的结果即可产生正确的结果。

其中str 参数是你的SQL 字符串。函数一旦发现字符串中有单引号出现,就在前面补上一个单引号。

方法二:

利用数据对象中的参数。可以利用ADODB.COMMAND 对象,把含有单引号的字符串传递给COMMAND ,然后执行查询等操作即可。

以上两种方法比较,方法一增加了系统处理时间,方法二简洁、高效,如果采用存储过程,然后再传递参数给存储过程,存储过程是预编译的,这样系统的效率更高。

下面就举例子加以说明。

程序如下:

首先把前面的函数加入。在窗体的通用中声明如下变量:

cnn1.Open strCnn, , , 0 '打开连接

End Sub

Private Sub Command1_Click() '演示字符处理

Dim i As Integer

Dim j As Integer

Set parm = New ADODB.Parameter

Set mycommand = New ADODB.Command

Dim str As String

str = Combo1.Text

str = ProcessStr (str)

mycommand.ActiveConnection = cnn1 '

指定该command 的当前活动连接

mycommand.CommandText = " select * from

employee where fname = '" & str & "'"

mycommand.CommandType = adCmdText '表明command 类

Set rstByQuery = New ADODB.Recordset

Set rstByQuery = mycommand.Execute()

i = 0

Do While Not rstByQuery.EOF

i = i + 1 ' i 中保存记录个数

rstByQuery.MoveNext

Loop

MSFlexGrid1.Rows = i + 1 '动态设置MSFlexGrid 的行

和列

MSFlexGrid1.Cols = rstByQuery.Fields.count + 1

MSFlexGrid1.Row = 0

For i = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = i + 1

MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name

Next '设置第一行的标题,用域名填充

i = 0

'Set rstByQuery = mycommand.Execute()

rstByQuery.Requery

Do While Not rstByQuery.EOF

i = i + 1

MSFlexGrid1.Row = i '确定行

For j = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = j + 1

MSFlexGrid1.Text = rstByQuery(j) '添充所有的列

Next

rstByQuery.MoveNext

Loop '这个循环用来填充MSFlexGrid 的内容

End Sub

Private Sub Command2_Click()'参数方法

Dim i As Integer

Dim j As Integer

Set parm = New ADODB.Parameter

Set mycommand = New ADODB.Command

' parm_jobid.Name = "name1" this line can be ommited

parm.Type = adChar '参数类型

parm.Size = 10 '参数长度

parm.Direction = adParamInput '参数方向,输入或输

parm.Value = Combo1.Text '参数的值

mycommand.Parameters.Append parm '加入参数

mycommand.ActiveConnection = cnn1 '

指定该command 的当前活动连接

mycommand.CommandText = " select *

from employee where fname =? "

mycommand.CommandType = adCmdText '表明command 类

Set rstByQuery = New ADODB.Recordset

Set rstByQuery = mycommand.Execute()

i = 0

Do While Not rstByQuery.EOF

i = i + 1 ' i 中保存记录个数

rstByQuery.MoveNext

Loop

MSFlexGrid1.Rows = i + 1 '动态设置MSFlexGrid 的行

和列

MSFlexGrid1.Cols = rstByQuery.Fields.count + 1

MSFlexGrid1.Row = 0

For i = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = i + 1

MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name

Next '设置第一行的标题,用域名填充

i = 0

rstByQuery.Requery

Do While Not rstByQuery.EOF

i = i + 1

MSFlexGrid1.Row = i '确定行

For j = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = j + 1

MSFlexGrid1.Text = rstByQuery(j) '添充所有的列

Next

rstByQuery.MoveNext

Loop '这个循环用来填充MSFlexGrid 的内容

End Sub

查询部分可以用存储过程以提高处理效率,减低网络流量。本程序在NT WORKSTA TION 4.0 SP4、SQL SERVER 7.0 上调试通过。

SQL Server单引号两种处理技巧

和数据库打交道要频繁地用到SQL 语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦S QL 语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL 语法不对,本人发现有两种方法可以解决和处理这种单引号的问题(以VB 为例子)。

方法一:

利用转义字符处理SQL 语句。下面的函数可以在执行SQL 语句前调用, 执行处理后的结果即可产生正确的结果。

其中str 参数是你的SQL 字符串。函数一旦发现字符串中有单引号出现,就在前面补上一个单引号。

方法二:

利用数据对象中的参数。可以利用ADODB.COMMAND 对象,把含有单引号的字符串传递给COMMAND ,然后执行查询等操作即可。

以上两种方法比较,方法一增加了系统处理时间,方法二简洁、高效,如果采用存储过程,然后再传递参数给存储过程,存储过程是预编译的,这样系统的效率更高。

下面就举例子加以说明。

程序如下:

首先把前面的函数加入。在窗体的通用中声明如下变量:

cnn1.Open strCnn, , , 0 '打开连接

End Sub

Private Sub Command1_Click() '演示字符处理

Dim i As Integer

Dim j As Integer

Set parm = New ADODB.Parameter

Set mycommand = New ADODB.Command

Dim str As String

str = Combo1.Text

str = ProcessStr (str)

mycommand.ActiveConnection = cnn1 '

指定该command 的当前活动连接

mycommand.CommandText = " select * from

employee where fname = '" & str & "'"

mycommand.CommandType = adCmdText '表明command 类

Set rstByQuery = New ADODB.Recordset

Set rstByQuery = mycommand.Execute()

i = 0

Do While Not rstByQuery.EOF

i = i + 1 ' i 中保存记录个数

rstByQuery.MoveNext

Loop

MSFlexGrid1.Rows = i + 1 '动态设置MSFlexGrid 的行

和列

MSFlexGrid1.Cols = rstByQuery.Fields.count + 1

MSFlexGrid1.Row = 0

For i = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = i + 1

MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name

Next '设置第一行的标题,用域名填充

i = 0

'Set rstByQuery = mycommand.Execute()

rstByQuery.Requery

Do While Not rstByQuery.EOF

i = i + 1

MSFlexGrid1.Row = i '确定行

For j = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = j + 1

MSFlexGrid1.Text = rstByQuery(j) '添充所有的列

Next

rstByQuery.MoveNext

Loop '这个循环用来填充MSFlexGrid 的内容

End Sub

Private Sub Command2_Click()'参数方法

Dim i As Integer

Dim j As Integer

Set parm = New ADODB.Parameter

Set mycommand = New ADODB.Command

' parm_jobid.Name = "name1" this line can be ommited

parm.Type = adChar '参数类型

parm.Size = 10 '参数长度

parm.Direction = adParamInput '参数方向,输入或输

parm.Value = Combo1.Text '参数的值

mycommand.Parameters.Append parm '加入参数

mycommand.ActiveConnection = cnn1 '

指定该command 的当前活动连接

mycommand.CommandText = " select *

from employee where fname =? "

mycommand.CommandType = adCmdText '表明command 类

Set rstByQuery = New ADODB.Recordset

Set rstByQuery = mycommand.Execute()

i = 0

Do While Not rstByQuery.EOF

i = i + 1 ' i 中保存记录个数

rstByQuery.MoveNext

Loop

MSFlexGrid1.Rows = i + 1 '动态设置MSFlexGrid 的行

和列

MSFlexGrid1.Cols = rstByQuery.Fields.count + 1

MSFlexGrid1.Row = 0

For i = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = i + 1

MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name

Next '设置第一行的标题,用域名填充

i = 0

rstByQuery.Requery

Do While Not rstByQuery.EOF

i = i + 1

MSFlexGrid1.Row = i '确定行

For j = 0 To rstByQuery.Fields.count - 1

MSFlexGrid1.Col = j + 1

MSFlexGrid1.Text = rstByQuery(j) '添充所有的列

Next

rstByQuery.MoveNext

Loop '这个循环用来填充MSFlexGrid 的内容

End Sub

查询部分可以用存储过程以提高处理效率,减低网络流量。本程序在NT WORKSTA TION 4.0 SP4、SQL SERVER 7.0 上调试通过。


相关内容

  • 软件开发面试基础题
  • 一.数据库系统 1.1:数据库基本理论 1.数据库与数据库管理系统有什么区别? 答:数据库是以某种数据模型所确定的数据结构方式来组织和存储数据的.简单来说,数据库是存放数据的仓库,数据库管理系统是用来管理数据库的. 2.是什么数据模型? 答:数据模型是对现实世界数据特征进行抽象的工具,用来描述和处理 ...

  • 批处理格式
  • 批处理格式和执行顺序: [SQLVar] - - [OpenIcoFile] - [SetIco] - - [OpenFile] - [SQLExe] - [SetAutoValue] - 单元说明: 一.[SQLVar] :增加新的SQL参数开头: 1.格式: 参数名=数值 数据类型 : 数据类型 ...

  • 图书管理信息系统的设计和实现
  • 目录 图书管理信息系统的设计和实现 端应用程序的开发两个方面.对于前者要求建立起数据一致性和完整性强.数据安全性好的数据库.而对于后者则要求应用程序功能完备, 易使用等特点. 本图书管理信息系统是利用计算机管理信息处理的迅速.准确.可靠且具有强大存储能力的突出特点,全面提高图书馆的管理水平和工作效率 ...

  • 记一次渗透经过
  • 记一次渗透测试经过 首发IT168安全频道 转载请著明 [safe.it168.com] 作者:伤心的鱼 [IT168 专稿]前言: 笔者的一位朋友应聘到一家公司做网管,据说整个机房就他们俩人,工作很轻松.几乎是没什么事做,但是昨天突然给我打电话说是机房被入侵了,被人加了很多用户并且什么cain,a ...

  • 网络爬虫技术探究
  • JIU JIANG UNIVERSITY 毕 业 论 文 题 目 网络爬虫技术探究 英文题目 院 系 信息科学与技术学院 专 业 计算机科学与技术 姓 名 闻泽 班级学号 A081129 指导教师 二○一二年五月 信息科学与技术学院学士学位论文 摘 要 网络爬虫是一种自动搜集互联网信息的程序.通过网 ...

  • CSDN技术中心 五种提高 SQL 性能的方法
  • 五种提高 SQL 性能的方法 author:Johnny Papa Data Points Archive 有时, 为了让应用程序运行得更快,所做的全部工作就是在这里或那里做一些很小调整.啊,但关键在于确定如何进行调整!迟早您会遇到这种情况:应用程序中的 SQL 查询不能按照您想要的方式进行响应.它 ...

  • 个人图书管理系统
  • 个人图书管理系统 学 院: 专业班级: 姓 名: 学 号: 指导老师: 日 期:2010年9月18日 设计报告 个人图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面.对于后台数据库的建立和维护要求建立起数据一致性和完整性强.数据安全性好的 ...

  • 服装销售管理系统论文
  • 第一章 绪论 1.1 引言 随着计算机和网络的高速发展和日趋普及,越来越多的商家在网上开起商店,向消费者展示出一片不同传统购物的新颖天地.在美国.日本等信息化程度较高的国家和地区,网络商店发展速度迅猛,美国的世界级超一流的零售商,如沃尔玛.凯玛特 .科罗格.J .C 培尼等纷纷挤身于网络经商的行列. ...

  • 社区医院管理系统
  • 本科生毕业论文(设计) 题目:基于JSP 的社区医院门诊管理系统 学 院 学科门类 专 业 计算机软件 学 号 1110451011 姓 名 指导教师 2015 年 5 月 20 日 摘 要 2015年,随着计算机行业的快速发展,将计算机和互联网引入医院管理是必要的,它不仅简化了管理的复杂性,还减少 ...