【问题标题】:Operator '&' is not defined for type 'string' and 'system.guid'没有为类型“string”和“system.guid”定义运算符“&”
【发布时间】:2014-02-23 23:52:14
【问题描述】:

我有一些 VB 代码试图在函数中执行 sql

Public Shared Function getBackgroundInfo(ByVal aID As Guid) As pd_ABC

    Dim SQLCMD As New SqlCommand
    Dim BackgroundInfoDS As New DataSet()

    SQL = "select * from tblABC where ID = '" & aID & "'"

.....

我的 ID 和 aID 都是 GUID 类型, 但视觉工作室在ID = '" & aID & "'" 的位置显示错误 我想知道是否有更好的方法来做到这一点?还是我需要使用参数化查询? 感谢您的建议!

【问题讨论】:

  • 编译器明确告诉你哪里出了问题。

标签: sql vb.net


【解决方案1】:

"select * from tblABC where ID = '" 是一个字符串,aID 是一个 guid。

aID 添加到字符串中时,请使用aID.ToString()

我肯定会推荐您的代码的参数化版本 - 出于安全性、代码质量和一般良好实践的考虑。

【讨论】:

  • 谢谢!这很有帮助!我也有 ID = Session("Selected"),从下拉列表选择中获取值。当我将 ID 设置为 GUID 类型时,会出现“指定转换无效”的错误。有办法处理吗?
【解决方案2】:

您可以在 Guid 实例上调用 ToString() 以获取 guid 的字符串表示形式:

SQL = "select * from tblABC where ID = '" & aID.ToString() & "'"

并回答您的其他问题

或者我需要使用参数化查询吗?

您不需要,但您可能应该这样做。使用参数化查询更安全、更易读。

【讨论】:

  • 我认为没有理由不使用参数化查询。使用它们总是更好。
  • @Szymon 这正是我所说的。您不必使用它,但最好这样做。
  • 我个人不会说“你不需要”。从技术上讲,这是正确的。但这不应该被推荐。
  • 非常感谢您的建议!虽然我不知道我只能投票一次~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2014-09-08
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多