OriginalGriff
Вы пытаетесь получить доступ к массиву или списку и указываете значение индекса, которое либо отрицательно, либо больше, чем самый большой доступный индекс. Например, если у вас есть три элемента в массиве или списке, то индексы 0, 1 и 2 допустимы, но любое другое значение вообще вызовет исключение.
Посмотрите на свой код - используйте трассировку стека, чтобы идентифицировать свой метод - и либо используйте отладчик, либо добавьте информацию журнала, чтобы точно определить, какая коллекция и индекс задействованы, а также проверяемые значения.
Мы не можем сделать ничего из этого для вас: у нас нет доступа к вашему сайту, вашему коду или вашим данным!
Member 8583441
Я публикую свой код, Пожалуйста, помогите мне. И во-вторых, мне нужно иметь выбранное значение переключателя в stringbuilder, как я могу этого достичь.
пустота AddTabPanels()
{
SubjectCategoryTabs.Tabs.Четкий();
по каждому элементу (объект DataTable ТБ в ДС.Таблицы)
{
for (int i = 0; i < tb.Rows.Граф; i++)
{
имя строки = tb.Rows[i]["SubjectCategory"].Метод toString();
AjaxControlToolkit.Панель TabPanel = новый AjaxControlToolkit.TabPanel
{
HeaderText = имя.Метод toString()
};
строка sQuestionsAndOptions = BindQuestionsAndChoices(имя);
панель.Управления.Добавить(новый литерал { Text = sQuestionsAndOptions });
SubjectCategoryTabs.Tabs.Add(панель);
}
}
}
private string BindQuestionsAndChoices(строковое значение)
{
StringBuilder htmlTable = новый StringBuilder();
SqlConnection con = новый SqlConnection(DbBridge.Соединение с БД);
пробовать
{
if (con.State == ConnectionState.Закрытый)
против.Открыть();
строка запроса = "выбрать * из QuestionsChoice где тема = '" + сессия["тема"] + "' и SubjectCategory = '" + значение + "' заказ QuestionNumber АСК";
SqlDataAdapter sda = новый SqlDataAdapter(запрос, con);
DataTable dt = новый DataTable();
ПДД.Заполнить(ДТ);
htmlTable.Добавлять("");
если (!объект.Равно(ДТ, нуль))
{
StringBuilder sbQA = новый StringBuilder();
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
sbQA.Аппендикс(@"");
строка aQuestion = sbQA.Метод toString();
если (ДТ.Строк.Count > 0)
{
для (int i = 0; i < dt.строк.Граф; i++)
{
htmlTable.(AQuestion AppendFormat, ДТ.Строки[я]["QuestionNumber"], ДТ.Строки[я]["вопрос"] ДТ.Строки[я]["ChoiceA"], ДТ.Строки[я]["ChoiceB"], ДТ.Строки[я]["ChoiceC"], ДТ.Строки[я]["подобранных"]);
}
htmlTable.Добавить("{0}) {1}&л;тип входного=""радио"" код=""рб1{0}"" название=""параметры{0}"" значение=""собой""и GT; а) &ЛТ;метка для=""рб1{0}""&ГТ;{2} в<тип входного=""радио"" код=""рб2{0}"" название=""параметры{0}"" значение=""Б""и gt; Б) &ЛТ;метка для=""рб2{0}""&ГТ;{3} в<тип входного=""радио"" код=""рб3{0}"" название=""параметры{0}"" значение=""с""&ГТ; с) &ЛТ;метка для=""рб3{0}""&ГТ;{4} в<тип входного=""радио"" код=""rb4{0}"" название=""параметры{0}"" значение=""Д""&ГТ; Д) &ЛТ;метка для=""rb4{0}""&ГТ;{5}");
}
еще
{
htmlTable.Append(@"записей нет.");
htmlTable.Добавлять("");
}
}
}
поймать(исключение бывший)
{
ClientScript.RegisterClientScriptBlock(метод gettype(), "ошибка", "предупреждение('" + экс.Сообщение + "');", правда);
}
наконец
{
if (con.State == ConnectionState.Открыть)
против.Закрывать();
}
верните htmlTable.Метод toString();
}
OriginalGriff
Мы понятия не имеем - мы не можем запустить этот код изолированно и не имеем никакого доступа к данным, стоящим за ним, если бы могли!
Серьезно, это зависит от вас, чтобы собрать информацию - и это означает отладчик или ведение журнала. Без него мы можем сделать даже меньше, чем вы!
Но, пожалуйста, не делай так SQL! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.
Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.
Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?
Если вы делали это через весь ваш сайт, вы потеряете свою базу данных - и есть вероятность, что посетителю с расстояния в тысячу километров даже не придется входить в систему, чтобы сделать это...