Web API для запроса SQL Server и возврата результата не работает должным образом - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь подключиться к SQL Server из веб-API и вернуть набор результатов в виде JSON.Но мой код, показанный здесь, не работает, как ожидалось.Я пытаюсь вернуть весь ответ на запрос в виде JSON:

[HttpGet]
public HttpResponseMessage Getdetails(string ROOM)
{
    string commandText = "SELECT * from [TDB].[dbo].[results_vw] where ROOM = @ROOM_Data";

    string connStr = ConfigurationManager.ConnectionStrings["TDBConnection"].ConnectionString;

    var jsonResult = new StringBuilder();

    using (SqlConnection connection = new SqlConnection(connStr))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ROOM_Data", SqlDbType.VarChar);
        command.Parameters["@ROOM_Data"].Value = ROOM;

        connection.Open();

        var reader = command.ExecuteReader();

        if (!reader.HasRows)
        {
            jsonResult.Append("[]");
        }
        else
        {
            while (reader.Read())
            {
                jsonResult.Append(reader.GetValue(0).ToString());
            }
        }

        var response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
        response.Content = new StringContent(jsonResult.ToString());

        connection.Close();

        return response;
    }
}

Этот код возвращает этот результат:

333838362692368203368203368203362692368203359544362692368203362692368203362692368203368203

Где я ожидаю JSON как

 {"data":
  [
  {"R_ID":"368203","ROOM":"K2"}, 
  {"R_ID":"368203","ROOM":"K2"}
  ]}

Теперь я создал класс модели с именем DatabaseResult для хранения ответа, но я не уверен, как сохранить результат в классе модели в контроллере

public class DatabaseResult
{
      public int r_id { get; set; }
      public string room { get; set; }
}

1 Ответ

0 голосов
/ 10 октября 2018

Текущий результат заключается в том, что вы только возвращаете значение из первого столбца каждой строки и добавляете его в построитель строк.

Создайте новый экземпляр модели и заполните его, используя значения изчитатель для каждой строки.

[HttpGet]
public IHttpActionResult Getdetails(string ROOM) {
    string commandText = "SELECT * from [TDB].[dbo].[results_vw] where ROOM = @ROOM_Data";
    string connStr = ConfigurationManager.ConnectionStrings["TDBConnection"].ConnectionString;
    var jsonResult = new StringBuilder();
    using (SqlConnection connection = new SqlConnection(connStr)) {
        using (SqlCommand command = new SqlCommand(commandText, connection)) {
            command.Parameters.Add("@ROOM_Data", SqlDbType.VarChar);
            command.Parameters["@ROOM_Data"].Value = ROOM;
            connection.Open();
            List<DatabaseResult> records = new List<DatabaseResult>();
            using (var reader = command.ExecuteReader()) {
                while (reader.Read()) {
                    var row = new DatabaseResult {
                        r_id = (int)reader["r_id"],
                        room = (string)reader["room"],
                        //...other properties.
                    };
                    records.Add(row);
                }
                return Ok(records);
            }
        }
    }
}

Приведенное выше использует имена столбцов в качестве индексатора для получения значений из считывателя.

...