В C # как я могу отправить данные с SQL Server на HTTP-запрос, используя метод POST? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть приложение для Windows, и мне нужно отправить некоторые данные на удаленный сервер.Я отправляю данные, но отправляет только одно значение, поэтому мне нужно прочитать таблицу из SQL Server и сразу отправить все значения в этой таблице.

Код для отправки данных:

 private void SaveUser()
 {
        CN.conn = CN.connection;

        CN.cmd = new SqlCommand("SELECT [FULLNAME]  FROM STUDENTS", CN.conn);

        CN.conn.Close();
        CN.conn.Open();

        CN.dr = CN.cmd.ExecuteReader();

        while (CN.dr.Read())
        {
            try
            {    
                 using (var wb = new WebClient())
                 {
                     var data = new NameValueCollection();

                     data["latitude"] = CN.dr[0].ToString();

                     var response = wb.UploadValues("https://urbanwaste.000webhostapp.com/user/pickup.php", "POST", data);
                     string responseInString = Encoding.UTF8.GetString(response);
                 }
            }
            catch (Exception ex)
            {                  
                MessageBox.Show(ex.Message);
            }

            MessageBox.Show("Successfully");
        }

        CN.conn.Close();
}

Моя таблица базы данных:

Database table that I need to send

remote database server

Кто-нибудь может мне помочь?

Извините за мой плохой английский

Спасибо

1 Ответ

0 голосов
/ 29 сентября 2018

Примерно так - я не собирал и не запускал его, поэтому извиняюсь, если он не идеален, но, надеюсь, он укажет вам правильное направление

using Newtonsoft.Json;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;

private class DataToSendModel
{
    public string FullName { get; set; }
    public string OtherProperty1 { get; set; }
    public string OtherProperty2 { get; set; }
}

// async as I have used .NET Core and it is best practice, but you can remove async from everywhere if you want (I would suggest not)
public async Task SaveUser()
{
    // Always wrap in a `using` statement to endsure cleanup of connections and resources
    using (var conn = new SqlConnection(config.GetConnectionString("SomeConnectionStringConfigName")))
    using (var cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        // Consider a stored procedure for this
        cmd.CommandText = "SELECT FullName, OtherColumn1, OtherColumn2 FROM Students";

        conn.Open();

        using (var reader = await cmd.ExecuteReaderAsync())
            while (reader.Read())
            {
                var dataToSend = new DataToSendModel
                {
                    FullName = reader["FullName"].ToString(),
                    OtherProperty1 = reader["OtherColumn1"].ToString(),
                    OtherProperty2 = reader["OtherColumn2"].ToString()
                };

                // Don't use this, use HttpClient https://blog.jayway.com/2012/03/13/httpclient-makes-get-and-post-very-simple/
                //using (var wb = new WebClient())
                using (var httpClient = new HttpClient())
                {
                    var response = await httpClient.PostAsync("https://urbanwaste.000webhostapp.com/user/pickup.ph", new StringContent(JsonConvert.SerializeObject(dataToSend)));

                    response.EnsureSuccessStatusCode();

                    string content = await response.Content.ReadAsStringAsync();
                }
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...