动态声明

时间:2014-04-04 11:05:16

标签: sql vb.net

我使用复选框列表来选择导出订单,我使用以下命令导出订单我的问题是如何使用以下代码在in语句中放置chracher?

  For Each obj As Object In CheckedListBox1.CheckedItems
        tempstring = Chr(39) & obj.ToString() & Chr(39)
        sb.AppendLine(String.Join(",", tempstring)
    Next

返回sql的函数

   Friend Function GetDistinctOrdersForLocations(OrderNumber As String) As String Implements  
    iScriptBuilder.GetDistinctOrdersForLocations
    Dim retVal As String = "SELECT DISTINCT location, ordernumber FROM orders "
    retVal &= "where orders.ordernumber in (" & OrderNumber & ")"
    Return retVal
   End Function

这是通过上面的函数生成这个sql

SELECT DISTINCT location, ordernumber FROM orders where orders.ordernumber
 in ('Puals Test V1' 
 'Puals Test V2'   

) 

2 个答案:

答案 0 :(得分:0)

当然可以。您可以在单引号中引用tempstring来创建object.ToString()。然后将其添加到StringBuilder 而不做任何更改,因为String.Join不会对一个字符串执行任何操作。 String.Join使用分隔符将字符串列表连接在一起,但您没有传入列表,只是一个字符串 - 此处没有任何内容可以加入。

您需要做的是

For Each obj As Object In CheckedListBox1.CheckedItems
    tempstring = Chr(39) & obj.ToString() & Chr(39)
    If sb.Length > 0 THEN
       sb.Append(",")
    End If
    sb.Append(tempstring)
Next

如果已经有一些内容,则会在StringBuilder附加一个逗号,然后附加新字符串。

答案 1 :(得分:0)

使用内置功能:

retVal &= string.Join(
    ",", 
    CheckedListBox1.CheckedItems
        .Select(x => string.Format("'{0}'", x.ToString())));

在执行此类构造时,请注意SQL注入。将它移动到存储过程或传递可变数量的预准备语句可能更安全。

检查this answer是否有更安全的方法来实现目标。