簡體   English   中英

如何在C#數據綁定中將值列表作為參數傳遞

[英]How to pass a list of values as parameter in c# databinding

我有一個帶有MySql數據庫的Asp.Net應用程序。 要訪問此數據庫,我使用數據集(.xsd),將查詢放入TableAdapters中。 這些查詢之一具有WHERE IN子句,例如:

SELECT somefield
FROM sometable
WHERE somefield IN (?)

somefield是一個字符串值。 TableAdapter函數需要一個字符串參數來替換查詢參數。 但是,我想傳遞一個List<string> (或數組,或任何其他類型)來檢查多個值。 到目前為止,我發現的唯一方法是將列表轉換為逗號分隔的列表:

GetData(string.Join(",", myList.ToArray());

只要列表中只有一個值,它就可以正常工作。 使用兩個值,查詢將返回0行。 我在MySql中激活了常規日志,發現它與引號有關。 到達數據庫的查詢是:

SELECT somefield
FROM sometable
WHERE somefield IN ('foo,bar')

加入值時,我添加了額外的引號:

GetData(string.Join("','", myList.ToArray());

但是多余的引號只能轉義,結果仍然是0行:

SELECT somefield
FROM sometable
WHERE somefield IN ('foo\',\'bar')

現在,我看到的唯一選擇是將每個單個字符串轉換為id並將這些整數連接為字符串。 就像在這個線程中一樣。 但這意味着要對數據庫進行很多額外的調用才能獲取這些ID。 我真的更喜歡使用字符串值!

誰知道如何解決這個難題?

嘗試這個:

GetData(String.Format("'{0}'", String.Join(",", myList.ToArray()));

如果單引號被轉義,請將其加倍,例如:

GetData(String.Format("''{0}''", String.Join(",", myList.ToArray()));

TableAdapter將保留轉義的引號。 您可以創建一個用戶定義的函數,該函數采用逗號分隔的參數並將其作為行返回。 這樣,您可以按以下方式訪問該功能。 我以前用T-SQL完成過。 它應該在MySQL中可行。

SELECT somefield
FROM sometable
WHERE somefield IN UDFDelimitedToRows(?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM