Выбор всей строки в базе данных Mysql с использованием C# и сохранение ее в виде списка - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь выбрать одну конкретную c строку из моей mysql базы данных.

В SQL Я бы просто использовал

select * from endkunden where id = 2;

, это прекрасно работает Я получаю все, что хочу.

Теперь я хочу сделать это в своем коде c# и сохранить данные в виде списка строк.

Я попытался сделать это следующим образом

public List<string> SelectListRow(string target, string table,string idef, int id)
    {
        string query = "SELECT " + target + " FROM " + table + " where "+ idef + " = " +id;
        List<string> list = new List<string>();

        if (this.OpenConnection())
        {
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {

                list.Add(Convert.ToString(dataReader[target]));
            }

            dataReader.Close();
            this.CloseConnection();
            return list;
        }

        return list;
    }

Так как это работало для выбора всех столбцов в таблице с использованием

select compname from endkunden;

Я предположил, что это будет работать и со строками, но это не так. При его использовании

я использую следующий запрос:

select * 
from endkunden 
where id = 2

, но теперь я получаю сообщение об ошибке:

System.IndexOutOfRangeException
HResult = 0x80131508
Nachricht = Не удалось найти указанный столбец в результатах: *
Quelle = MySql .Data

Stapelüberwachung:
at MySql .Data.MySqlClient.ResultSet.GetOrdinal (String имя)
в MySql .Data.MySqlClient.MySqlDataReader.GetOrdinal (имя строки)
в MySql .Data.MySqlClient.MySqlDataReader.get_Item (имя строки)
в MySQL_Tts.D .SelectListRow (строковая цель, строковая таблица, String idef, Int32 id) в C: \ Users \ Murf \ source \ repos \ MySQL Tests \ MySQL Tests \ DBA C .cs: строка 187
в MySQL_Tests.Program.Main (String [] args) в C: \ Users \ Murf \ source \ repos \ MySQL Tests \ MySQL Tests \ Program.cs: строка 13

Nachricht означает сообщение, quelle означает ошибку, stapelüberwachung означает .. я не знаю

Есть идеи, как это исправить?

Привет, Murf

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Поскольку вы передаете *, кажется, что вам нужно несколько столбцов, а не только первый.

public List<string> SelectListRow(string target, string table,string idef, int id)
    {
        string query = "SELECT " + target + " FROM " + table + " where "+ idef + " = " +id;
        List<string> list = new List<string>();
        if (this.OpenConnection())
        {
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                for (int i = 0; i < dataReader.FieldCount; i++) {
                {
                    list.Add(dataReader.GetString(i));
                }
            }
            dataReader.Close();
            this.CloseConnection();
            return list;
        }

        return list;
    }

Это даст вам требуемые значения. Еще одна вещь, которую я заметил, состоит в том, что, если есть исключение, считыватель данных соединения не очищается. Вы можете исправить это, используя блок try с предложением finally или заключив их в блоки 'using'.

0 голосов
/ 27 апреля 2020

Вместо использования средства чтения данных с именем столбца используйте dataReader.GetString (0), который даст первый столбец.

public List<string> SelectListRow(string target, string table,string idef, int id)
    {
        string query = "SELECT " + target + " FROM " + table + " where "+ idef + " = " +id;
        List<string> list = new List<string>();
        if (this.OpenConnection())
        {
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {

                list.Add(dataReader.GetString(0));
            }
            dataReader.Close();
            this.CloseConnection();
            return list;
        }

        return list;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...