2013-11-30 3 views
0

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

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

 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 это окно, где я печатаю в ID.

ответ

0

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 [email protected];");    
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 [email protected];")) 
      { 
      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); 
+0

Теперь я сделал метод, как вы разместили (по пути его в отдельном классе под названием «sql_reader»), но я не знаю, как сделать этот синтаксис? – user3051872

+0

@ user3051872: вы можете запустить код сейчас? просто замените свой 'URL()' на 'URL()' в моем ответе полностью, он отлично работает. –

+0

Та же ошибка: недопустимый URI: схема URI недопустима. ID - abcdefg12345 и должен возвращать 127.0.0.1/test.html – user3051872

Смежные вопросы