将SQL包含null的列添加到带SQL Server的Datatable时,我应该使用什么数据类型?

时间:2014-07-22 16:42:01

标签: c# sql sql-server

我有一个发送此数据的客户端:

{"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和Bit和bit,但它在VS2013中显示了这些类型的语法错误。

1 个答案:

答案 0 :(得分:0)

我会尝试使用变量TinyInt而不是布尔值。这是一个单字节数据类型,您可以使用它来输入值1或0(如果您愿意),分别表示true和false。可能还有其他方法,但这就是我在表格中使用的方法。

Here's an MSDN article that explains some of the data types.

修改 对不起,但我不知道上次我是如何使用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);
}

我目前没有机会对此进行测试,所以请告诉我这是否至少指向了正确的方向。