MSSQL Server 中单引号的两种处理方法 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    和数据库打交道要频繁地用到 SQL 语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点,

MSSQL Server 中单引号的两种处理方法

。因此,大多数的程序员极少或较少用这种绑定的方式。而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦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中的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

    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

    ---- 查询部分可以用存储过程以提高处理效率,减低网络流量,

电脑资料

MSSQL Server 中单引号的两种处理方法》(https://www.unjs.com)。

    ---- 本程序在NT WORKSTATION 4.0 SP4、SQL SERVER 7.0 上调试通过

    QQ空间 搜狐微博 人人网 开心网 百度搜藏更多

    Tags:MS-SQL Server中单引号的两种处理方法

    复制链接收藏本文打印本文关闭本文返回首页

    上一篇:显示 Sql Server 中所有表中的信息

    下一篇:SQL SERVER 2000通讯管道后复用劫持

   

相关文章

2009-08-08数据库高并发情况下重复值写入的避免 字段组合约束

2011-09-09MSSQL中递归SQL查询语句实例说明-

2010-05-05MMC提示不能打开文件SQLServerEnterpriseManager.MSC的解决方法

2013-11-112分法分页存储过程脚本实例

2013-01-01SQL Server误区30日谈 第8天 有关对索引进行在线操作的误区

2006-11-11SQL语句导入导出大全

2012-04-04SQLServer 跨库查询实现方法

2012-09-09使用SSIS创建同步数据库数据任务的方法

2007-11-11解决MSSQL2005远程连接sql2000非默认端口数据库的问题

2013-08-08SQL 查询和删除重复字段数据的方法

   

文章评论

   

最 近 更 新

   

在SQL Server 2005中创建CLR存储过程的详

SQLSERVER 时间格式大全

sql 语句插入结果为select和值混合示例

sql脚本查询数据库表,数据,结构,约束等操

ADO.NET数据连接池剖析

sql查询点滴记录

使用SqlBulkCopy时应注意Sqlserver表中使

SQL Server约束增强的两点建议

Sql学习第四天——SQL 关于with cube,wit

教你几种在SQLServer中删除重复数据方法

   

热 点 排 行

   

SQL Server 2008图文安装教程

SQL Server 2012 安装图解教程(附

sqlserver中distinct的用法(不重

SQL Server导入、导出、备份数据

SQL语句去掉重复记录,获取重复记

SQL Server数据库入门学习总结

SQL Server错误代码大全及解释(

sql convert函数使用小结

sql 时间函数 整理的比较全了

用SQL语句添加删除修改字段、一些

最新文章