使用动态SQL查询Excel工作表。避免SQL注入

时间:2014-10-24 13:45:33

标签: sql excel sql-injection dynamic-sql openrowset

我有以下代码

DECLARE @SQL NVARCHAR(max), @SourceFile nvarchar(500);

set @SourceFile = N'\\XXXX\C$\Spreadsheet.xls';
SELECT  @SQL = N'SELECT * FROM  OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 8.0;Database='+@SourceFile+''', ''SELECT * FROM [Filer_IDs$]'' )
                WHERE   [Column1] = ''TRUE'' OR [Column2] = ''TRUE'''
EXEC (@SQL)
--------------------------    

set @SourceFile = N'\\XXXX\C$\Spread''sheet.xls';
SELECT  @SQL = N'SELECT * FROM  OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 8.0;Database=@SourceFile'', ''SELECT * FROM [Sheet1$]'' )
                WHERE   [Column1] = ''TRUE'' OR [Column2] = ''TRUE'''               

EXEC sp_executesql @SQL, N'@SourceFile nvarchar(500)', @SourceFile

第一个代码片段工作正常,但如果电子表格中有一些转义字符如“'”,则名称失败(SQL注入)。我想使用sp_executesql,但我收到以下错误:

OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”返回消息“Microsoft Access数据库引擎无法找到对象'Sheet1 $'。确保对象存在且您正确拼写其名称和路径名称。如果'Sheet1 $'不是本地对象,请检查您的网络连接或联系服务器管理员。“ Msg 7350,Level 16,State 2,Line 1 无法从OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”获取链接服务器“(null)”的列信息。

请帮忙。

0 个答案:

没有答案