簡體   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