Попытка заставить пользовательский ввод пройти через LIKE SQL-оператор - PullRequest
0 голосов
/ 18 марта 2019

В настоящее время работает над программой угадывания музыки.У меня есть текст, введенный пользователем, и программа попытается найти совпадение.Если программа найдет их, она покажет имя исполнителя.В данный момент я пытаюсь запустить инструкцию SELECT, чтобы найти наиболее подходящее совпадение.Когда я жестко кодирую элемент, консоль выдаст мне художников, но когда я попытаюсь установить его как пользовательский ввод, он ничего не отобразит.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;


namespace Databasetesting
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Start\n");

            // MySQL Database Connection String
            string cs = @"server=192.168.0.5;userid=***;password=***;database= Music_Mixer;port=8889";

            // set up connection
            MySqlConnection con = null;

            // make a reader
            MySqlDataReader  reader = null;

            Console.WriteLine("Please enter song lyrics:");
            string uI = Console.ReadLine();

            // write a try catch statement   
            try
            {
                // cal in database
                con = new MySqlConnection(cs);

                // open connection
                con.Open();

                // Statement
                String cmdText = "SELECT Artist  FROM Songs WHERE Lyrics LIKE ('%@uI%')";

                // make a new command
                MySqlCommand cmd = new MySqlCommand(cmdText, con);

                // binding
                cmd.Parameters.AddWithValue("@uI", uI);

                // make reader = to new command
                reader = cmd.ExecuteReader();

                // run the reader and display to user
                while (reader.Read())
                {
                    string Artists = reader["Artist"].ToString();
                    Console.WriteLine(Artists);
                }
            }
            catch(MySqlException er)
            {
                Console.WriteLine(er);
            }
            finally
            {
                if(con != null)
                {
                    con.Close();
                }
                Console.ReadLine();
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Сделайте это вместо

string uI = "%" + Console.ReadLine() + "%";

Вы также можете выполнить интерполяцию строк

string uI = $"%{Console.ReadLine()}%";

И ваш оператор SQL

String cmdText = "SELECT Artist  FROM Songs WHERE Lyrics LIKE @uI";
1 голос
/ 18 марта 2019

Вы можете использовать конкатенацию строк с указанным параметром.В MySql вы можете попробовать оператор concat || (в зависимости от версии, конфигурации) или функцию concat

вместо ...LIKE ('% @ uI%') перейти к ... LIKE concat ('%', @ uI, '%')

SELECT Artist  FROM Songs WHERE Lyrics LIKE concat('%',@uI,'%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...