Какой тип данных я должен использовать при добавлении столбца, который будет содержать нуль в Datatable с SQL Server?

1

У меня есть клиент, который отправляет эти данные:

{"answers":[
   {"response":true},
   {"response":true},
   {"response":true},
   {"response":false},
   {"response":false}]}

У меня есть такие классы:

public class AnswerRow
{
    public bool? Correct { get; set; }
    public bool Response { get; set; }
}

public class AnswerRowList
{
    public IList<AnswerRow> Answers { get; set; }
}

В моем WebAPI я получаю следующие данные:

    [HttpPut]
    [Route("MarkQuestion/{testQuestionId}/{questionUId:Guid}")]
    [ValidateModel]
    public async Task<IHttpActionResult> MarkQuestion(string testQuestionId, Guid questionUId, [FromBody]AnswerRowList answer)
    {
        var createdBy = User.Identity.GetUserId();
        DataTable answers = new DataTable();
        answers.Columns.Add("Response", typeof(????));
        foreach (AnswerRow a in answer.Answers)
        {
            answers.Rows.Add(a.Response);
        }

Я думаю, что весь мой код в порядке, но я не знаю, как добавить столбец в DataTable, который примет логическое значение. Я попробовал BIT и бит и бит, но он показывает синтаксическую ошибку в VS2013 для этих типов.

Теги:
sql-server

1 ответ

0

Я бы попытался использовать переменную TinyInt вместо логического. Это один байтовый тип данных, который вы можете использовать для ввода значений 1 или 0, если хотите, для представления true и false соответственно. Могут быть и другие способы, но это то, что я использовал в своих таблицах.

Вот статья MSDN, в которой объясняются некоторые типы данных.

EDIT Извините, но я не могу понять, как я использовал TinyInt в прошлый раз. Я бы рекомендовал изменить ваш тип на INT, а по соглашению использовать только значения 1 или 0. Таким образом, вы можете взять свой код здесь:

    answers.Columns.Add("Response", typeof(????));
    foreach (AnswerRow a in answer.Answers)
    {
        answers.Rows.Add(a.Response);
    }

И сделайте это:

answers.Columns.Add("Response", typeof(int));
foreach(AnswerRow a in answer.Answers)
{
    if(a.Response) // Here I'm trying to check if a.Response is true
        answers.Rows.Add(1);
    else
        answers.Rows.Add(0);
}

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

  • 0
    На самом деле кажется, что TinyInt не может быть найден, поэтому я думаю, что мне нужно включить использование в файл c #.
  • 0
    О, хм. Мне нужно будет выкопать какой-нибудь старый исходный код, но я открыл свою рабочую среду MySQL, чтобы проверить, и я использовал tinyint. Возможно, в вашем коде c # вы могли бы преобразовать переменную в байт вместо BIT? Или, если вы не можете найти какой-либо другой способ, вы также можете использовать обычный int и снова использовать значения 1 или 0.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню