【问题标题】:How to make an INSERT QUERY String using an array of variables如何使用变量数组制作 INSERT QUERY 字符串
【发布时间】:2015-03-31 17:42:06
【问题描述】:

我的代码是:

For index = 0 To dupColIndx - 1
    expression(index) = dgvINSRT.Rows.Item(i).Cells.Item(index).Value.ToString
Next

Dim strInsrt As String = "INSERT INTO " & _ 
                         dbTbl & _
                         colStr & _
                         Strings.Replace(expression(0), "'", "''", 1, -1, CompareMethod.Binary) & "','" & _
                         Strings.Replace(expression(1), "'", "''", 1, -1, CompareMethod.Binary) & "','" & _
                         Strings.Replace(expression(2), "'", "''", 1, -1, CompareMethod.Binary) & "')"

在上面的代码中,而不是手动输入表达式(0)、表达式(1)等。我希望在输入表达式(n)的“n”值后自动连接字符串。

谢谢。

【问题讨论】:

  • 你是如何使用插入查询字符串的?您实际上是在将命令发送到数据库吗?如果是这样,我强烈建议使用参数化(通过SqlCommandOracleCommand 等)来避免 SQL 注入问题(或捕获错误数据)。很容易循环遍历您的数组以将每个项目作为参数添加到命令对象以发送到数据库。如果是这种情况,需要知道您使用的是什么类型的命令对象,以编写适当的代码示例。

标签: vb.net string insert-into


【解决方案1】:

你可以使用String.Join:

For index = 0 To dupColIndx - 1
    expression(index) = dgvINSRT.Rows.Item(i).Cells.Item(index).Value.ToString.Replace("'", "''")
Next

Dim strInsrt As String = "INSERT INTO " & _ 
                     dbTbl & _
                     colStr & _
                     String.Join("','", expression) & "')"

注意:如果您自己转义值,则使用正确的数据库替换您正在使用的数据库至关重要,否则查询对于 SQL 注入攻击是开放的。此处使用的方法适用于 SQL Server 和 Access,但可能不适用于其他数据库。例如,它适合 MySQL,那么您还需要转义反斜杠。

【讨论】:

  • 字符串返回如下:INSERT INTO ['Part Commodity Class$']([Dispatch Commodity],[Dispatch Commodity Temp],[Dispatch Commodity 2]) VALUES ('DispatchCommodity3','DispatchCommodityTemp3','DISPATCHCOMMODITY3','') 一切都很好,但我无法插入数据表,因为末尾有 ,''。请帮助删除它。
  • @TheDProgrammer:这意味着数组expression 有一项过多。它应该使用ReDim expression(dupColIndx - 1) 创建。
  • You Rock!...它与 Dim expression(dupColIndx - 1) As String... 非常感谢 :)
【解决方案2】:
If expression.Count >= 1
    Dim strInsrt As String = "INSERT INTO " & dbTbl & colStr

    For i= 0 To expression.Count - 2
        strInsrt &= "'" & Strings.Replace(expression(i), "'", "''", 1, -1, CompareMethod.Binary) & "',"
    Next i

    strInsrt &= "'" & Strings.Replace(expression(expression.Count - 1), "'", "''", 1, -1, CompareMethod.Binary) & "')"
End If

【讨论】:

  • 末尾有一个额外的逗号和双引号(即,''),导致 INSERT STATEMENT 无法使用。请帮我纠正这个问题:INSERT INTO ['Part Commodity Class$']([Dispatch Commodity],[Dispatch Commodity Temp],[Dispatch Commodity 2]) VALUES ('DispatchCommodity2','DispatchCommodityTemp2','DISPATCHCOMMODITY2','')
  • 更新了我的答案,你可能需要稍微修改一下colStr 的值,因为我不知道里面有什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多