为 '' 使用 SQL 参数

Using SQL Parameters for ''

第一次海报 - 中等长度reader。我是一名入门级程序员,目前致力于传递 SQL 存储过程一些可能包含单引号 (') 的信息。

过去,我们试图在传递此信息时仅使用 .Replace("'","''"),但最近,我们 运行 遇到了 returning 数据并在大约 20 个地方更改和替换设置(公司,哇!)。

我一直在考虑使用 SQL 参数来不必担心这些错误:',但不能 see/understand 我下面代码中的差异。第一个块是原始工作版本。第二个是我尝试介绍@paras。

SQL 作为字符串通过 ByVal 传递

前一个代码:

Dim dbConnection As New SqlConnection(ConnectionString)
Dim dbCommand As New SqlCommand(SQL, dbConnection)
MsgBox(dbCommand.CommandText.ToString) //Returns proper procedure/paras

dbCommand.CommandTimeout = CommandTimeout
dbConnection.Open()
dbCommand.ExecuteNonQuery()

具有 SQL 个参数的代码:

Dim dbConnection As New SqlConnection(ConnectionString)
Dim dbCommand As New SqlCommand("@SQL", dbConnection)
dbCommand.Parameters.Add("@SQL", SqlDbType.VarChar).Value = SQL
MsgBox(dbCommand.CommandText.ToString) //Returns "@SQL"

dbCommand.CommandTimeout = CommandTimeout
dbConnection.Open()
dbCommand.ExecuteNonQuery()

我觉得第二个区块应该returning 相同的信息。来自第一个块的 MsgBox 将 return 正确的 SQL。然而,第二个只是 returns "@SQL",而不是它似乎分配的 SQL 值。

是否有刷新SQL命令的特殊方法? 我不能只声明 @SQL 并在以后替换它吗?

浏览了 MSDN 并进行了大量搜索,引导我 here 已经,但运气不佳。

以下是如何将其设为参数化调用。感谢您努力防止 sql 注入!!!

dbCommand.CommandText = "LoginPassword"
dbCommand.CommandType = CommandType.StoredProcedure
dbCommand.Parameters.Add("@userID", SqlDbType.VarChar, 30).Value = userID
dbCommand.Parameters.Add("@Password", SqlDbType.VarChar, 30).Value = password
dbCommand.ExecuteNonQuery()

您需要确保做的一件事是,当您使用参数时,您应该始终指定精度或长度。我不知道在这种情况下你的应该是什么,所以你需要根据需要进行调整。

--如有语法错误请见谅。我使用 C#,但我认为我对 vb.net

的理解是正确的