关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server单引号的2种处理方案

    SQL Server单引号的2种处理方案

    2010-07-02 10:33:00 出处:ITJS
    分享

    以下的文章主要描述的是SQL Server单引号的2种处理方案,我们大家在实际操作中和数据库打交道时,SQL语句的使用频率是非常高的,当然你也可以是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。

    因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对SQL Server单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本人发现有两种方法可以解决和处理这种SQL Server单引号的问题(以VB为例子)。

    SQL Server单引号处理技巧方法一:

    利用转义字符处理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字符串。函数一旦发现字符串中有SQL Server单引号出现,就在过去不久的文章里补上一个单引号。

    SQL Server单引号处理技巧方法二:

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

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

    接下来的SQL server内容就举例子加以说明。

    新建一个项目,项目中有一个窗体(Form1),两个命令按钮,一个MSFlexGrid,名称分别为:Command1,Command2,MSFlexGrid1,一个COMBOX(COMBO1),它的内容预先设定为“Paolo'f”、“Paolo'f”。Command1演示方法一,Command2演示方法二,MSFlexGrid1存储方法二查询(SELECT)结果。

    对于其他的SQL操作(INSERT、DELTER、UPDATAE)方法极为类似,笔者就不再赘述。例子中用到SQL SERVER中的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};" & _ "server=ZYX_pc;uid=sa;pwd=PCDC;database=pubs" '   没有系统数据源使用连接字符串 'strCnn = "DSN=mydsn;UID=sa;PWD=;" 'DATABASE=pubs;  Driver={SQL Server};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 ii = 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 ii = 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 ii = 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 ii = 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 7.0 上调试通过,上述的相关内容就是对SQL Server单引号处理技巧的描述,希望会给你带来一些帮助在此方面。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。