[英]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.