SQL Server中处理单引号的两种技巧

和数据库打交道要频繁地用到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,然后执行查

询等操作即可。

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

时间: 2024-09-18 17:07:48

SQL Server中处理单引号的两种技巧的相关文章

sql server中批量插入与更新两种解决方案分享(asp.net)_实用技巧

若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// <summary> /// 大批量插入数据(2000每批次) /// 已采用整体事物控制 /// </summary> /// <param name="connString">数据库链接字符串</param> /// <param n

sql server中批量插入与更新两种解决方案分享(存储过程)_MsSql

1.游标方式 复制代码 代码如下: DECLARE @Data NVARCHAR(max) SET @Data='1,tanw,2,keenboy' --Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';')) OPEN data_cursor FETCH NEXT FROM data_cursor INTO @dataItem WHILE @@F

sql server中批量插入与更新两种解决方案分享(存储过程)

1.游标方式 复制代码 代码如下: DECLARE @Data NVARCHAR(max) SET @Data='1,tanw,2,keenboy' --Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';')) OPEN data_cursor FETCH NEXT FROM data_cursor INTO @dataItem WHILE @@F

将Access数据库中数据导入到SQL Server中的详细方法实例_实用技巧

Default.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AccessToSQL.aspx.cs" Inherits="AccessToSQL" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

由于ACCESS和SQL Server数据库是经常使用的两种数据库, 而且操作上很相似,决定将代码写在一起,但在操作上出了问题

问题描述 问题:由于ACCESS和SQLServer数据库是经常使用的两种数据库,而且操作上很相似,决定将代码写在一起,用一个数据库类型选择来做判断,代码如下//数据库类型选择if(DatabaseType=="ACCESS"){OleDbDataReadermyReader=GetMyOleDbDataReader(mySql);}else{SqlDataReadermyReader=GetMyReader(mySql);}if(myReader.Read()){//执行语句}错误提

SQL注入中绕过 单引号 限制继续注入_实用技巧

包括我写的那篇<SQL Injection的实现与应用>也是这样的例子,因为没有碰到任何的过滤,所以使我们相当轻松就注入成功了,如下: 复制代码 代码如下: http://www.jb51.net/show.asp?id=1;exec master.dbo.xp_cmdshell 'net user angel pass /add';-- 这往往给大家造成误解,认为只要变量过滤了'就可以防止SQL Injection攻击,这种意识为大量程序可以注入埋下祸根,其实仅仅过滤'是不够的,在'被过滤的

Asp.net中把Excel数据存储至SQL Server中的具体实现方法_实用技巧

ExcelWrapper 复制代码 代码如下:         /// <summary>        /// 查询EXCEL电子表格添加到DATASET        /// </summary>        /// <param name="filenameurl">文件路径</param>        /// <param name="table">dataset中的表名(并不是要和数据库中的表

关于sql server批量插入和更新的两种解决方案_MsSql

复制代码 代码如下: .游标方式 1 DECLARE @Data NVARCHAR(max)  SET @Data='1,tanw;2,keenboy'   --Id,Name  DECLARE @dataItem NVARCHAR(100)  DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';')) OPEN data_cursor FETCH NEXT FROM data_cursor INTO @dataItem   

SQL Server中INNER JOIN与子查询IN的性能测试

这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子查询孰优孰劣(IN是子查询的实现方式之一,本篇还是只对比INNER JOIN与子查询IN的性能,如果展开INNER JOIN与子查询性能对比,范围太大了,没法一一详述).下面这篇文章,我们就INNER JOIN与子查询IN这两种写法孰优孰劣,在不同场景下进行一下测试对比一下,希望能解答你心中的疑惑.   下面