Как отделить извлеченную информацию от инструкции select

#c# #mysql

#c# #mysql

Вопрос:

В настоящее время я пытаюсь получить информацию из своей базы данных sql и отделить ее, чтобы она отображала информацию следующим образом: 1) 2) 3) и т.д…

Прямо сейчас, когда я запускаю программу, названия песен возвращаются в свою собственную строку, но я хочу, чтобы они были пронумерованы. Я извлекаю названия песен с помощью инструкции 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 Play
    {

        //finding an artists
        public static void FindArtist()
        {
            //servere connection
            string cs = @"server=192.168.0.10;userid=dbsAdmin1903;password=password;database=Music_Mixer;port=8889";
            MySqlConnection conn = null;
            MySqlDataReader rdr = null;

            //prompt for artist
            string Art = PromptArtist();

            try
            {
                //call in database
                conn = new MySqlConnection(cs);

                //open connection
                conn.Open();

                //Statement
                String cmdText = "SELECT song_title FROM songs WHERE artist = @uI LIMIT 15";

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

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

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

               //if something is not found
                while (!rdr.HasRows)
                {
                    Console.WriteLine("rnSorry, we could find that Artist.");
                    Console.WriteLine("Would you like to try again?!");
                    Menu.menu();
                }

                //run the reader and display to user
                Console.Clear();

                Console.WriteLine($"Here are 15 songs by {Art}!");

                while (rdr.Read())
                {
                    //store song titles and display to user
                    string Songs;

                    Songs = rdr["Song_title"].ToString();

                    Console.WriteLine (Songs);

                }
                //run the play again method
                Console.Write("Press ENTER to continue...");
                Console.ReadLine();
                Console.WriteLine("What would you like to do?");


                Menu.again();

            }
            catch (MySqlException er)
            {
                Console.WriteLine(er);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                Console.ReadLine();
            }
        }


}

  

Комментарии:

1. Как возможно, что весь этот код имеет отношение к этому вопросу?

Ответ №1:

Если я правильно понял

 List<string> songsTitles = new List<string>();
while (rdr.Read())
{
    //store song titles and display to user
    string song = rdr["Song_title"].ToString();
    Console.WriteLine(song);
    songsTitles.Add(song);
}

var numberedSongs = songsTitles.Select((obj, index) => new {Index = index, Obj = obj}).ToArray();
string[] numberedSongsString = songsTitles.Select((obj, index) => $"{index}) {obj}").ToArray();
  

Ответ №2:

Вы можете использовать вспомогательный datatable, что-то вроде этого:

 DataTable dt = new DataTable();
MySqlCommand cmd = new MySqlCommand(cmdText, conn);
dt.Load(cmd.ExecuteReader());
if(dt.Rows.Count != 15){
    //error code
}else{
    foreach(DataRow row in dt.Rows){
        Console.WriteLine(row["Song_title"].ToString());
    }
}