在WHERE子句中使用DecryptByKey进行SQL参数化查询(VB.Net前端)

F队

我正在使用VB.Net与我的SQL Server后端进行通信,我刚刚在其中添加了对称密钥加密列。

当我在没有DecryptByKey的情况下对此表进行查询时,因此没有打开/关闭密钥,它可以正常工作。一旦我将其添加到WHERE子句中,它便会爆炸,尽管我认为这可能与Key的打开/关闭有关。这是一些要看的代码...

调用SQL Server的VB.Net代码

Dim _cn As New SqlClient.SqlConnection
Dim _dataset As New DataSet
Dim _dataapt As New SqlClient.SqlDataAdapter
Dim _command As New SqlClient.SqlCommand

_cn.ConnectionString = "fake connection string"
_cn.Open()

_command.CommandText = _SQL

If Not _parameters Is Nothing Then
    For _x As Integer = 0 To _parameters.Count - 1
        _command.Parameters.Add(_parameters(_x)._parameter, _parameters(_x)._type).Value = _parameters(_x)._value
        // _parameter = "@unencryptedValue", _type = SQLDbType.VarChar, _value = "12345"
    Next
End If

_command.CommandTimeout = 600
_command.Connection = _cn

If _cn.State = ConnectionState.Closed Then
    _cn.Open()
End If

_dataapt.SelectCommand = _command
_dataapt.Fill(_dataset)

_dataapt.Dispose()
_command.Dispose()
_cn.Close()
_cn.Dispose()

正在发送SQL代码

OPEN SYMMETRIC KEY TestKey 
DECRYPTION BY CERTIFICATE TestCertificate;
GO
SELECT 1  
FROM TestTable
WHERE CONVERT(varchar, DecryptByKey(encryptedField)) = @unencryptedValue
CLOSE SYMMETRIC KEY TestKey;
GO

如果上面没有引起注意,则@unencryptedValue是一个varchar(50),其值为“ 12345”

我收到两个错误,都说System.Data.SqlClient.SqlException:'GO'附近的语法不正确

当我直接在SSMS查询窗口中运行此查询时,它工作正常。

我知道GO必须位于自己的行上,因此当我创建用于_SQL的字符串时,每次都在其前后放置ChrW(13)和ChrW(10)。

另外,我知道在WHERE中执行DecryptByKey速度很慢,可能不是一个好主意,但是表将保持很小,因此这不是问题。

乔尔·科洪

GO不是SQL语言的一部分。它是Management Studio等工具使用的批处理分隔符,但Sql Server本身并不了解。

取而代之的是,您可以使用分号分隔单个语句(或者甚至仅使用换行符),并通过向数据库发送单独的调用(与众不同的ExecuteNonQuery / ExecuteScalar / ExecuteDataReader / Fill函数调用)来分隔批处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 webpack(前端 reactjs)和 .NET 后端热重载

在 where 子句中使用可变参数查询 SQL

与可变的字符串输入相比,如何使用vb.net在mysql中使用LIKE子句进行查询?

C# .NET Core 2.2 API 未接收到从 Angular 前端发送的参数对象

如何使用ASP.NET Core设置现代的前端开发工作流?

如何在vb.net中使用'select ... from ..where id in(list)'语法在vb.net中创建SQL查询

在 where 子句中使用日期函数进行 Codeigniter 查询

参数化动态 sql 查询 (VB.Net)

在where子句中使用每个子查询在SQL Server中进行计数

在SQL查询的'WHERE'子句中的'SELECT'中使用'IF'的结果

sql在where子句中使用查询别名

在组By或where子句中使用子查询SQL Server

T-SQL-在where和子句中使用参数

在同一远程托管面板上使用ASP.NET Core Web API从React前端进行通信

如何从 url 查询字符串在前端保存不记名令牌?ASP.NET 中的 RESTful api

如何一起使用AngularJS作为前端框架和ASP.NET MVC作为后端框架?

使用 HTTP Post(RESTful API)将请求从 React.JS 前端传递到 C# 后端(ASP.NET)

IIS 两个站点使用相同的url,ReactJS 前端,ASP Net Core 后端,无法访问后端

使用where子句在asp.net中使用控件进行搜索

如何在 oracle pl/sql 中的 where 或 join 子句中使用 50,000 个 ID 进行选择查询?

在SQL查询,ASP.net中使用日期参数

在Spark SQL的'WHERE'子句中使用'as'

在where子句中使用别名-SQL

SQL在where子句中使用CASE

如何使用Entity Framework .NET Core使用where子句编写SQL更新查询

SQL在where子句中使用子查询并在select中使用值

在 SQL 或前端处理逻辑

在WHERE子句中使用OR进行慢速JOIN查询-缺少可能的索引?

在 where 子句中使用当前日期进行 Hive 选择查询