Получите 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);