Получите DownloaLink от MySQL Table

Я попытался найти идентификатор в таблице MySQL и вернуть соответствующий столбец строки, который содержит URL. Но The Downloader всегда говорит мне, что формат ссылки неправильный.

Это мой метод:

      public string URL(string ID)
    {
        MySqlConnection con = new MySqlConnection("host=localhost;user=root;password=root;database=Downloader;");
        MySqlCommand cmd = new MySqlCommand("SELECT string FROM Files WHERE ID = '" + ID + "';");
        cmd.Connection = con;
        con.Open();
        MySqlDataReader reader = cmd.ExecuteReader();
        return reader.ToString();
    }

И вот загрузчик:

 private void button1_Click(object sender, EventArgs e)
    {
        sql_reader sql_reader = new sql_reader();
      if (!Directory.Exists("Downloads"));
        {
            Directory.CreateDirectory("Downloads");
        }

        WebClient client = new WebClient();
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
    client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
    client.DownloadFileAsync(new Uri(sql_reader.URL(textBox1.Text)), "./Downloads/" + textBox2.Text + "." + textBox3.Text);

textBox1 - это поле, в котором я набираю идентификатор.

1 ответ

Решение

1. вам нужно позвонить Read() функция перед извлечением записей из MySqlDataReader объект

2. Вы должны указать column name при доступе к записям.

Пример:

            String result="";
            MySqlDataReader reader = cmd.ExecuteReader();
            if(reader.Read())
            result=reader["columnname"].ToString();

3. Я бы предложил вам использовать Parametrised Queries избежать SQL injection Attacks,

Пример:

MySqlCommand cmd = new MySqlCommand("SELECT string FROM Files WHERE ID =@ID;");             
cmd.Parameters.AddWithValue("@ID",ID);

4. dipose MySqlCommand,MySqlConnection а также MySqlDataReader Объекты правильно. ты можешь использовать using{} блок, чтобы дозировать их чисто.

Полный код

 public string URL(string ID)
        {   
            String result="";
            using(MySqlConnection con = new MySqlConnection("host=localhost;user=root;password=root;database=Downloader;"))
           {
            using(MySqlCommand cmd = new MySqlCommand("SELECT string FROM Files WHERE ID =@ID;"))
            {
            cmd.Connection = con;
            con.Open();
            cmd.Parameters.AddWithValue("@ID",ID);
            using(MySqlDataReader reader = cmd.ExecuteReader())
            {
            if(reader.Read())
            result=reader["string"].ToString();
            else 
            result="";//you can customize here
            }
           }
          }
            return result;
        }

Решение 2:

Заменить это заявление:

client.DownloadFileAsync(new Uri(sql_reader.URL(textBox1.Text)), "./Downloads/" + textBox2.Text + "." + textBox3.Text);

С этим:

client.DownloadFileAsync(new Uri(sql_reader.URL(textBox1.Text),UriKind.Absolute), "./Downloads/" + textBox2.Text + "." + textBox3.Text);
Другие вопросы по тегам