У меня есть способ написать SqlCommand
, который включает в себя динамический список параметров.
Моя задача - передать каждому из new SqlParameter (@Param0, value0), new sqlParameter (@Param1, value1)
... может быть еще 50 параметров SQL. Его можно передать как жестко запрограммированную строку, но, по понятным причинам, пропуск sb.ToString()
не сработает (из-за запятых - это новые аргументы).
Как мне написать цикл или подобное для передачи правильного числа новых аргументов?
Моя попытка на данный момент ниже:
public ViewResult Index(int? ID)
{
using (var context = new Projects201819Context())
if (ID == null)
{
var sqlCommand = new SqlCommand();
// Array of item numbers - will change and can be longer/shorter, as required.
var SQL0 = "SELECT * FROM [database] WHERE material_id IN ({0})";
var idList = new List<int> { 11, 53, 125};
int[] idListArray = idList.ToArray();
var idParameterList = new List<string>();
var index = 0;
int IL = idList.Count;
// Create a SqlParameter for each element in the array called "@idParam0", "@idParam1"... and add to list idParameterList
foreach (var id in idList)
{
var paramName = "@idParam" + index;
sqlCommand.Parameters.AddWithValue(paramName, id);
idParameterList.Add(paramName);
index++;
}
// Finalise SQL String for datainput - DONE AND WORKS
sqlCommand.CommandText = String.Format(SQL0, string.Join(",", idParameterList));
var newSPList = new List<string>();
var m = 0;
foreach (var id in idList)
{
var SPName = " new SqlParameter(" + "\"" + "@idParam" + m + "\"" + "," + idListArray[m] + ")";
newSPList.Add(SPName);
m++;
}
string HELLO = string.Join(",", newSPList);
string MM = "\"" + sqlCommand.CommandText + "\"" + "," + HELLO;
var datainput = context.materials.SqlQuery(MM);
var data = datainput.ToList();
return View(data);
}
}
там, где есть идентификатор, хорошо и не дано (остальная часть if (id == null)
).
Критическим битом является SPName
- он успешно добавляет элементы в список newSPList
, а string.join
возвращает именно ту строку, которая мне нужна (HELLO), но я не могу затем передать эту длинную строку в качестве отдельных аргументов - имеет смысл - я просто не знаю, как обойти это!
Спасибо за любую поддержку!