Ваша строка кода:
string row = data_table.Rows["Name"][ID].toString();
вызывает ошибку "невозможно преобразовать строку в целое число", поскольку коллекция .Rows
в DataTable ожидает целочисленный индекс, и вы передали строку ("Имя")
Другими словами, думайте о datatable.Rows
как о массиве - вы должны индексировать его числом, а не строкой.Поскольку вы передали строку, и она не может быть автоматически преобразована в число, вы получаете ошибку «невозможно преобразовать»
В качестве примера для доступа к первой строке вы должны data_table.Rows[0]
, для 10-й строки это будет .Rows[9]
Для получения имени первого лица в таблице:
string name = data_table.Rows[0]["Name"].ToString();
У вашего кода есть другие проблемы:
toString();
нужен капиталT - Вы не пытаетесь использовать переданные параметры для уточнения поиска, поэтому ваш запрос загружает все строки из БД.Возможно, это должно было выглядеть так:
public static string SelectNameFromId(OleDbConnection connection, int id)
{
DataTable data_table = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT Name FROM Student WHERE ID = ?", connection);
adapter.SelectCommand.Parameters.AddWithValue("p1", id); //positional indexing
adapter.Fill(data_table);
string n = data_table.Rows[0]["Name"].ToString();
return n;
}