ВЫБЕРИТЕ запрос в c # - PullRequest
       11

ВЫБЕРИТЕ запрос в c #

0 голосов
/ 24 сентября 2019

Скажите, пожалуйста, почему следующий код дает исключение

Невозможно преобразовать из типа 'string' в 'int'

Код:

public static string Select (OleDbConnection connection, string Name, int ID)   
{
    DataTable data_table = new DataTable();
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT Name FROM Student WHERE ID = ID", connection);
    adapter.Fill(data_table);
    string row = data_table.Rows["Name"][ID].toString();
    return row;
}

1 Ответ

2 голосов
/ 24 сентября 2019

Ваша строка кода:

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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...