2016-05-24 3 views
0

Я пытаюсь подключиться к Teradata, используя код C#. Мне нужно выполнить оператор Select, используя предложение IN, и мне нужно передавать значения динамически.Использование предложения «IN» в TdParameter

Ex:

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

мне нужно использовать TdParameter, чтобы установить значение для пункта IN. Это может быть одно или несколько имен. Это часть веб-API, и я получаю список имен из ввода API.

Может ли кто-нибудь направить меня на то, как это сделать?

Я использую .Net 4.5 и версию Teradata dll версии 15.11. Pls сообщит мне, если вам нужно больше деталей.

+0

Кто предоставляет имена сотрудников? Это результат другого запроса? это в массиве/карте/..? –

+0

Он исходит из вызова API. Это список. Это часть веб-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) + "')"; 

одинарные кавычки

Это позволит сохранить кавычки. дайте мне знать, если это сработает.

TdParameter имеет список разрешенных типов (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

Смежные вопросы