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

本文关键字:返回 Count SQL Server CE 为什么 | 更新日期: 2023-09-27 18:25:34

我使用的是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);
};

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

Execute()报告的智能感知:

执行非查询SQL语句。

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

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

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

试试这个:

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

我重写了您的代码,更加注意Webmatrix的语法

@{
    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");
    }
}

我希望它能有所帮助。