Я исследовал другие ответы здесь, но ни один из них не подходит мне. Я добавил таблицу в базу данных, и теперь я получаю эту ошибку. Дело в том, что это работало на ком-то компьютере, но в моей, я получаю следующую ошибку. ps Мои связи прекрасны (если вы блуждали):
IndexOutOfRangeException
был обработан кодом пользователя
An exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll but was not handled in user code
Additional information: Cannot find table 0.
Код нарушения - это инициализация int я = 0
в цикле for
Вот мой код
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
string strSQLconnection = "Data Source=LOTUS;Initial Catalog=PMRS;Integrated Security=True";
SqlConnection sqlConn = new SqlConnection(strSQLconnection);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from PMRS.dbo.BOARDMEMBERS order by ORDERID";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConn;
SqlDataAdapter sa = new SqlDataAdapter();
try
{
sqlConn.Open();
sa.SelectCommand = cmd;
sa.Fill(ds);
int rCount = ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
Response.Write(ex);
sqlConn.Close();
sqlConn.Dispose();
}
finally
{
sqlConn.Close();
sqlConn.Dispose();
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i]["ID"].ToString() != "2")
{
sb.Append("<div class=\" col-md-6 \">");
sb.Append("<img src=\"../images/board/" + ds.Tables[0].Rows[i]["IMAGE"].ToString() + "\" /> ");
sb.Append("<h3>" + ds.Tables[0].Rows[i]["TITLE"].ToString() + "</h3> ");
sb.Append("<h4>" + ds.Tables[0].Rows[i]["FNAME"].ToString() + " " + ds.Tables[0].Rows[i]["MI"].ToString() + " " + ds.Tables[0].Rows[i]["LNAME"].ToString() + "</h4>");
sb.Append("<p>" + ds.Tables[0].Rows[i]["BIO"].ToString() + "</p> ");
sb.Append("<p>" + ds.Tables[0].Rows[i]["SUFFIX_PREFIX"].ToString() + "</p> ");
sb.Append("</div>");
}
}
Literal1.Text = sb.ToString();
}
Я - сторонний разработчик, и теперь мои руки снова мокрые на серверном программировании. Объясните это ребенку. лол спасибо
У вас есть ошибка, потому что вы пытаетесь получить доступ к ds.Tables[0]
, но ds.Tables
не имеет каких-либо элементов. Вы должны проверить, имеет ли ds.Tables
null и если ds.Tables
имеет какие-либо элементы перед доступом к ds.Tables[0]
как ds.Tables[0]
ниже
StringBuilder sb = new StringBuilder();
if (ds.Tables != null && ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
....
}
Literal1.Text = sb.ToString();
}
else
{
// do something when ds.Tables is null or ds.Tables doesn't have any elements
}
Вместо того, чтобы сосредоточиться на наборе результатов, я бы лучше посмотрел на вашу строку подключения и исключение, заключенное в блок catch
потому что очевидно, что команда/адаптер ничего не возвращает. Итак, посмотрите на строку подключения...
Data Source=LOTUS;Initial Catalog=PMRS;Integrated Security=True
и убедитесь, что...
LOTUS
с вашими учетными данными WindowsBOARDMEMBERS
существует в вышеупомянутой базе данныхи, наконец, посмотрите, что будет в ответ здесь...
catch (Exception ex)
{
Response.Write(ex); //<------ check this out, there must be an exception bubbling up
sqlConn.Close();
sqlConn.Dispose();
}
чтобы проверить, если здесь происходит исключение... закомментируйте все после блока finally
чтобы исключение (если оно есть) можно было отправить в ответ... потому что необработанное исключение, вероятно, отменяет ответ с помощью "желтого экрана", (если вы не установили пользовательскую страницу ошибок)
Возможно, вы захотите проверить, что, когда вы запустили команду для создания таблицы, она успешно выполнена (например, вы использовали инструмент запросов к базе данных для поиска в db и видите, что ваша таблица существует?)
Кроме того, вы должны проверить, что ваш запрос возвращает и опубликовать. Может быть, он не может найти никаких результатов?