Подскажите причину ошибки System.IndexOutRangeException - C#
Формулировка задачи:
Здравстуйте.
Задача подключиться в SQL серверу и вывести результат в "TreeView"
Вот код:
В конце строки: TreeNode node = new TreeNode(dr["Термины"].ToString()); в точке с запятой - ругается на "Необработанное исключение типа "System.IndexOutRangeException в System.Data.dll". Убедитесь в правильности имен столбцов данных, Что Индекс не имеет отр.значения и т.д.
Все названия правильные.
Кстати, пробовал менять название "Термины" на неправильное слово - ошибка та же самая.
Что может быть не так ?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace SQL_New_TreeView { public partial class Form1 : Form { SqlConnection con = new SqlConnection("Data Source=ARCHIVE; Initial Catalog=Термины и Определения; connection timeout=5; TrustServerCertificate=true; Encrypt=True; Integrated Security=SSPI"); public Form1() { InitializeComponent(); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { } private void Form1_Load(object sender, EventArgs e) { } private void Form1_Shown(object sender, EventArgs e) { try { con.Open(); MessageBox.Show("Connection Open ! "); //con.Close(); } catch (SqlException ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); //или MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button1_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); SqlCommand cm = new SqlCommand("SELECT * from Термины", con); //SqlDataAdapter da = new SqlDataAdapter("select * from Термины", con); try { SqlDataReader dr = cm.ExecuteReader(); while (dr.Read()) { TreeNode node = new TreeNode(dr["Термины"].ToString()); treeView1.Nodes.Add(node); } } catch(SqlException ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); //или MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
Да. Забыл ввести между
TreeNode node = new TreeNode(dr["Термины"].ToString());
и
treeView1.Nodes.Add(node);
ещё
node.Nodes.Add(dr["Раздел"].ToString());
Т.Е.было так:
TreeNode node = new TreeNode(dr["Термины"].ToString()); node.Nodes.Add(dr["Раздел"].ToString()); treeView1.Nodes.Add(node);
Решение задачи: «Подскажите причину ошибки System.IndexOutRangeException»
textual
Листинг программы
TreeNode node = new TreeNode("Термины"); node.Nodes.Add(dr["Раздел"].ToString()); treeView1.Nodes.Add(node);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д