2016-05-24 39 views
0

正在嘗試使用C#代碼連接到Teradata。我需要執行Select語句,使用IN子句,我需要動態傳遞值。使用TdParameter中的'IN'子句

例:

TdCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "Select EmpNum,EmpName from Employee where EmpName IN (?)"; 

我需要使用TdParameter設置IN子句的值。它可以是一個或多個名稱。這是Web API的一部分,我從API輸入接收名稱列表。

有人可以指導我如何做到這一點?

我使用.Net 4.5和Teradata dll版本15.11。請讓我知道你是否需要更多細節。

+0

誰提供員工姓名?它來自另一個查詢的結果嗎?它是在一個數組/地圖/ ..? –

+0

它來自API調用。這是一個列表。這是一個Web API的一部分。 – csharpnewbie

回答

1

我不能想到比這更好的解決方案。

List<string> employeeNames = APICall(); 
cmd.CommandText = "Select EmpNum,EmpName from Employee where EmpName 
        IN (\"" + String.Join("\",\"", employeeNames) + "\")"; 

cmd.CommandText = "Select EmpNum,EmpName from Employee where EmpName 
        IN ('" + String.Join("','", employeeNames) + "')"; 

單引號

這將保留引號。讓我知道這個是否奏效。 (TdType - https://developer.teradata.com/doc/connectivity/tdnetdp/15.11/help/Teradata.Client.Provider~Teradata.Client.Provider.TdType.html),數組不是其中之一。

+0

它沒有工作。在發佈之前,我已經嘗試了類似的東西。它試圖將它們視爲單個字符串,並返回空結果。類似於Select EmpNum,EmpName來自Employee,其中EmpName IN(「Name1,Name2」) – csharpnewbie

+0

可理解,考慮名稱列表被指定爲單個參數。所以它應該是一個單一的字符串。如何編輯commandText以獲得更新後的答案中的正確數組。 –

+1

這正是我所嘗試的。但由於數組中的字符串仍然具有單個字符串中的所有值,因此它不起作用。所以我不得不調整這一點,並讓它工作。謝謝@littlecegian。 – csharpnewbie