У меня есть список BuilderString
, который я хочу, чтобы содержать данныеЧтение данных из базы данных SQL Server с C#
public List<int> IDS = new List<int>();
public List<StringBuilder> Items = new List<StringBuilder>();
Что случилось с этим кодом?
SqlConnection con2 = new SqlConnection("Data Source=aya-PC\\SQLEXPRESS;Initial Catalog=ItemSet;Integrated Security=True");
SqlDataReader rdr2;
SqlCommand cmd2;
con2.Open();
for (int i = 0; i < IDS.Count; i++)
{
cmd2 = new SqlCommand("select item From TransactiontData where [email protected][i]", con2);
cmd2.CommandType = CommandType.Text;
rdr2 = cmd2.ExecuteReader();
SqlParameter param = new SqlParameter();
param.ParameterName = "@IDS[i]"
while (rdr2.Read())
{
Items[i].Append((StringBuilder)rdr2["item"]);
}
}
есть ошибка диапазона списка «Индекс находился вне диапазона. Должно быть неотрицательным и меньше, чем размер коллекции.» –
Комбинация/слияния этого ответа, а другой от @ DanGuzman- SQLServerMVP будет лучше/работать. Для этого ответа: 1) установка 'cmd2.Parameter [" @ IDS "]. Значение' должно быть 'IDS [i]', 2), скорее всего, не понадобится некоторое время вокруг 'rdr2.Read()', 3) коллекция 'Items' еще не имеет элементов, поэтому вам нужно использовать' Items.Add() 'вместо ссылки через' Items [i] ', 4). Я не думаю, что вы можете (или должны) приведение непосредственно к StringBuilder, поскольку входящее значение на самом деле является просто строкой, а 5) должно, вероятно, иметь 'con2.Close()' после цикла 'for'. –
@srutzky: ** (1) **: нет, проверьте мой ответ - имя параметра в моем ответе ** IS ** просто '@ IDS' - нет смысла индексировать это имя параметра .... и ** (5) ** - необязательно, так как блоки 'using() {...}' ** гарантируют ** надлежащее удаление (и, таким образом, закрытие) connectoin –