为什么SQL Server CE Count()返回负值?

时间:2014-10-03 01:54:25

标签: c# sql webmatrix

我使用的是SQL Server CE,因此我无法使用条件语句。我试图检查记录是否存在,如果存在,则更新它,如果没有,则创建它。

我打印出检查值,它是-1。

var db = Database.Open("DB2");

var check = "SELECT count(*) FROM QuestionnaireData WHERE ID=" + WebSecurity.CurrentUserId;

if (db.Execute(check) == 0)
{
    var insert = "INSERT INTO QuestionnaireData VALUES (@0, @1)";
    db.Execute(insert, WebSecurity.CurrentUserId, "TEST");
}
else {
    var update = "UPDATE QuestionnaireData SET Q1='" + "TEST" + "' WHERE ID=" + WebSecurity.CurrentUserId;
    db.Execute(update);
};

2 个答案:

答案 0 :(得分:2)

Execute()报告的智能感知:

  

执行非查询SQL语句。

由于您实际上是在查询数据,因此您需要Query()方法之一。

由于您只需要一个值(计数),请使用QueryValue()

  

执行一个SQL查询,返回单个标量值作为结果。

请改为尝试:

var count = Convert.ToInt32(db.QueryValue(check));

答案 1 :(得分:2)

我重写了您的代码,更多地关注Webmatrix.Data库的语法

@{
    var db = Database.Open("DB2");

    var check = "SELECT * FROM QuestionnaireData WHERE Id = @0";
    var questionnaire = db.Query(check, WebSecurity.CurrentUserId);

    if (questionnaire.Any())
    {
        var update = "UPDATE QuestionnaireData SET Q1 = 'TEST' WHERE ID = @0";
        db.Execute(update, WebSecurity.CurrentUserId);
    }
    else {
        var insert = "INSERT INTO QuestionnaireData (Id, Q1) VALUES (@0, @1)";
        db.Execute(insert, WebSecurity.CurrentUserId, "TEST");
    }
}

我希望它可以提供帮助。