我已經有了一個帶有MySql數據庫的Asp.Net應用程序。爲了訪問這個數據庫,我使用了一個數據集(.xsd),我在TableAdapters中放置了我的查詢。其中一個查詢有WHERE IN
條款,如:如何在c#數據綁定中傳遞值列表作爲參數
SELECT somefield
FROM sometable
WHERE somefield IN (?)
這somefield
是一個字符串值。 TableAdapter函數需要一個字符串參數來替換查詢參數。但是,我想通過一個List<string>
(或一個數組,或任何其他類型)來檢查多個值。到目前爲止,我發現的唯一方法是到列表轉換成一個逗號separeted列表:
GetData(string.Join(",", myList.ToArray());
它工作正常,只要有只有一個列表中的值。使用兩個值查詢返回0行。我激活了MySql中的常規日誌,發現它與引號有關。到達數據庫的查詢是:
GetData(string.Join("','", myList.ToArray());
但額外的報價只得到逃脫,結果仍然是0行:
SELECT somefield
FROM sometable
WHERE somefield IN ('foo\',\'bar')
SELECT somefield
FROM sometable
WHERE somefield IN ('foo,bar')
我加盟值時,添加額外的引號
現在我看到的唯一選擇是將每個單個字符串轉換爲一個id並將這些整數連接成一個字符串。像在this線程中一樣。但是這意味着需要額外的數據庫來調用這些ID。我真的更喜歡使用字符串值!
誰知道如何解決這個難題?
你爲什麼不使用LINQ? – dursk
簡短回答:這個應用程序的歷史原因。較長的回答:你開始思考,我一直在關注LINQ。我一定會在未來看看Entity Framework/LINQ! – Briqunullus