Методы поиска клиентов в MySQL по ID или по телефону


У меня есть этот код, который возвращает объект клиента, но для этого я использую два метода.

Как я могу улучшить это, чтобы быть более эффективным и убедиться, что он соответствует общим стандартам?

    //Method that returns a client from a string
    private static Cliente ObtenerCliente(string query)
    {
        try
        {
            abrirConexion(); //Static method that opens a connection

            cmd = new MySqlCommand(query, mySqlConexion);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            if (dataReader.Read())
            {
                return new Cliente(
                    Convert.ToInt32(dataReader["id_cliente"]),
                    dataReader["nombre_cliente"].ToString());
            }
            else
            {
                dataReader.Close();
                return null;
            }
        }
        catch (MySqlException e)
        {
            MessageBox.Show(e.ToString());
            return null;
        }
        finally
        {
            cerrarConexion(); //Static method that closes the connection
        }
    }

    //Method that returns a customer from a phone number given
    public static Cliente ObtenerCliente_Telefono(string telefono)
    {
        string query = "SELECT * FROM clientes WHERE (telefono1_cliente = '" + telefono + "' OR telefono2_cliente = '" + telefono + "');";
        return ObtenerCliente(query); //Metodo que hace la consulta
    }
    public static Cliente ObtenerCliente_Id(int id)
    {
        string query = "SELECT * FROM clientes  WHERE id_cliente = " + id + ';';
        return ObtenerCliente(query);
    }


144
1
задан 26 марта 2018 в 05:03 Источник Поделиться
Комментарии
2 ответа

Ничего плохого Cliente ObtenerCliente принятие текста запроса.

Страдает от недетерминированным. Вы только собираетесь сделать первый, но без order by тогда SQL будет просто выбрать один для вас.

using лучший подход на мой взгляд

Точно мне не нравится


Статический метод, который открывает соединение

Создать подключение и пусть будет утилизировать

private static Cliente ObtenerCliente(string query)
{
using (Connection mySqlConexion = new Connection(conString))
{
try
{
//abrirConexion(); //Static method that opens a connection
mySqlConexion.Open();
using (cmd = new MySqlCommand(query, mySqlConexion))
{
using (MySqlDataReader dataReader = cmd.ExecuteReader())
{
if (dataReader.Read())
{
return new Cliente(
Convert.ToInt32(dataReader["id_cliente"]),
dataReader["nombre_cliente"].ToString());
}
else
{
//dataReader.Close(); let the using dispose
return null;
}
}
}
}
catch (MySqlException e)
{
MessageBox.Show(e.ToString());
return null;
}
finally
{
//cerrarConexion(); //Static method that closes the connection
}
}
}

0
ответ дан 26 марта 2018 в 02:03 Источник Поделиться

Расширяя ответ папарацци, я бы использовать третичный, чтобы возвратить результат. Мне тоже нравится информативность по умолчанию, а не null:

return dataReader.Read()
? new Cliente(Convert.ToInt32(dataReader["id_cliente"]),
dataReader["nombre_cliente"].ToString())
: default(Cliente);

Также рассмотрите возможность использования верхней(1) в запросах, вместе с тем путем внушения, как код обрабатывает только одну строку

0
ответ дан 28 марта 2018 в 10:03 Источник Поделиться