热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

SQLServer中单引号的两种处理技巧

----和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一

---- 和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一


  ---- 和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本人发现有两种方法可以解决和处理这种单引号的问题(以VB为例子)。
  
  ---- 方法一:利用转义字符处理SQL语句。下面的函数可以在执行SQL语句前调用,执行处理后的结果即可产生正确的结果。
  
  Function ProcessStr(str As String)
  Dim pos As Integer
  Dim stedest As String
   pos = InStr(str, "'")
   
  While pos > 0
  str = Mid(str, 1, pos) & "'" & Mid(str, pos + 1)
  pos = InStr(pos + 2, str, "'")
  Wend
  ProcessStr = str
  End Function
  
  ---- 其中str参数是你的SQL字符串。函数一旦发现字符串中有单引号出现,就在前面补上一个单引号。
  ---- 方法二:利用数据对象中的参数。可以利用ADODB.COMMAND对象,把含有单引号的字符串传递给COMMAND,然后执行查询等操作即可。
  
  ---- 以上两种方法比较,方法一增加了系统处理时间,方法二简洁、高效,如果采用存储过程,然后再传递参数给存储过程,存储过程是预编译的,这样系统的效率更高。
  
  ---- 下面就举例子加以说明。
  
  ---- 新建一个项目,项目中有一个窗体(Form1),两个命令按钮,一个MSFlexGrid,名称分别为:Command1,Command2,MSFlexGrid1,一个COMBOX(COMBO1),它的内容预先设定为"Paolo''f"、"Paolo'f"。Command1演示方法一,Command2演示方法二,MSFlexGrid1存储方法二查询(SELECT)结果。对于其他的SQL操作(INSERT、DELTER、UPDATAE)方法极为类似,笔者就不再赘述。例子中用到sql server(WINDOWS平台上强大的数据库平台)中的PUBS数据库中的EMPLOYEE表,同时可以用SQL语法把其中两条记录中的FNAME改为"Paolo''f"、"Paolo'f"。 SQL语法如下:
  
  update employee set fname=" Paolo''''f" 
  where emp_id='PMA42628M'
  update employee set fname=" Paolo''f" 
  where emp_id='PMA42628M'
  
  ---- 程序如下:
  ---- 首先把前面的函数加入。
  
  ---- 在窗体的通用中声明如下变量:
  
  Dim cnn1 As ADODB.Connection '连接
  Dim mycommand As ADODB.Command '命令
  Dim rstByQuery As ADODB.Recordset '结果集
  Dim strCnn As String '连接字符串
  Private Sub Form_Load()
   Set cnn1 = New ADODB.Connection '生成一个连接
   strCnn = "driver={sql server(WINDOWS平台上强大的数据库平台)};" & _
     "server=ZYX_pc;uid=sa;pwd=PCDC;database=pubs" '
  没有系统数据源使用连接字符串
   
  'strCnn = "DSN=mydsn;UID=sa;PWD=;"
  'DATABASE=pubs;Driver={sql server(WINDOWS平台上强大的数据库平台)};SERVER=gzl_pc" '
  如果系统数据源MYDSN指向PUBS数据库,也可以这样用
  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 WORKSTATION 4.0 SP4、sql server(WINDOWS平台上强大的数据库平台) 7.0 上调试通过。
推荐阅读
  • 代码生成器实战教程:提升编程效率的利器
    本系列文章旨在通过一系列实践案例,详细介绍如何利用代码生成器提高开发效率。本文将引导您完成从下载安装到实际应用的全过程。 ... [详细]
  • 面对日益竞争激烈的就业市场,合理的职业规划对于在校大学生尤为重要。本文旨在探讨如何通过有效的自我认知、技能提升及目标设定,帮助计算机专业的学生构建清晰的职业路径,以增强就业竞争力。 ... [详细]
  • 本文档详细介绍了Excel VBA编程中的基本语法,包括循环结构、条件判断、数据处理以及用户界面设计等内容,旨在帮助初学者快速掌握VBA编程技巧。 ... [详细]
  • 本文旨在介绍一系列提升工作效率的浏览器插件和实用小工具,帮助用户在日常工作中更加便捷高效。内容由原作者授权发布。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文介绍了如何在React应用中实现延迟加载以提高性能,以及如何利用自定义Hook和高阶组件(HOC)来增强组件功能。通过这些技术,开发者可以构建更加高效和可维护的应用。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • 本文将深入探讨两个有趣且引人思考的话题:一是许多程序员缺乏盲打技巧这一基础能力;二是技术管理者与技术专家之间的角色差异及国内现状。 ... [详细]
  • 面对众多的数据分析工具,如何选择最适合自己的那一个?对于初学者而言,了解并掌握几种核心工具是快速入门的关键。本文将从数据处理的不同阶段出发,推荐三种广泛使用的数据分析工具。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
author-avatar
小楼GH81_660
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有