繁体   English   中英

动态声明

[英]Dynamtic In Statement

我正在使用复选框列表来选择要导出的订单,并且正在使用以下内容导出订单我的问题是如何使用以下代码将chracher放置在in语句中?

  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'   

) 

当然可以。 您可以通过在单引号中引用tempstring object.ToString()来创建tempstring字符串。 然后,您无需进行任何更改即可将其添加到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后面加上一个逗号,然后会添加新的字符串。

使用内置功能:

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

在进行这种构造时,也要注意SQL注入。 将其移至存储过程或传递可变数量的准备好的语句可能更安全。

查看此答案 ,以更安全地实现目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM