2017-04-05 74 views
0

我的代码不工作。我尝试了一些不同的东西,但不知道从哪里去。我在下面的查询中添加了从null开始的值。在运行我的代码之后,分数值仍然为空。在SQL查询中使用“更新”和“连接”一起增加数据库值

答案数据库和WeeklyPredictions数据库都有其他问题的几个属性。这仅仅是一个使用的第一个问题1.

var Q1 = ""; 
    var weeknumber = ""; 

    if (IsPost) 
    { 
     if (Request.Form["weeknumber"] != null) 
     { 
      weeknumber = Request.Form["weeknumber"]; 
     } 
     if (Request.Form["Question1"] != null) 
     { 
      string selectedAnswer = Request.Form["Question1"].ToString(); 
      Q1 = Request.Form["Question1"]; 
     } 


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

     var q1w = ("UPDATE t1 " + 
      "SET t1.weeklyScore = t1.weeklyScore + 10, t1.totalScore = t1.totalScore + 10 " + 
      "FROM dbo.Scores as t1 " + 
      "INNER JOIN dbo.WeeklyPredictions AS t2 " + 
      "ON t1.Id = t2.Id " + 
      "WHERE t2.Question1 = @0 " + 
      "AND t2.WeekNumber = @1"); 

db.Execute(q1w, Q1, weeknumber); 
+0

SQL的语法看起来不错,所以我的猜测会成为你变量赋值的问题。您可以手动运行SSMS中的SQL(使用特定的Question1值和WeekNumber值)吗?怎么了? – Aron

+0

嗨,我没有SSMS ...也许我会下载它。我知道我在WeeklyPredictions数据库中有值,可以为用户分数添加分数。尽管如此,分数为零。我可以看到数据库设计,我可以看到表中有什么@Aron –

+0

您不必使用SSMS(尽管我认为它使事情更简单),也许您可​​以使用硬编码值执行ASP代码。只是为了找出问题所在。是'weeknumber = Request.Form [“weeknumber”];'与表完全相同的数据类型?有没有填充空格或字符? SQL语句需要完全匹配。只是把它扔在那里,因为我不能肯定地说。 – Aron

回答

2

在SQL NULL + 10仍然NULL的代码片段,改变你的代码,使用ISNULL(col, 0) + 10

https://technet.microsoft.com/en-us/library/ms191504(v=sql.105).aspx

+0

好的,这是问题所在。我硬编码“0 + 10”,它将10保存到数据库中。我不知道'ISNULL'或'IFNULL'是如何工作的。我尝试了:'IFNULL(t1.weeklyScore,0))'以及'ISNULL(t1.weeklyScore,0))'并且不能识别这些函数。作为参考,我的错误是 - **在System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理。附加信息:'IFNULL'不是一个公认的内置函数名称。** –

+0

@JulesMena你可以在你的问题中发布你尝试过的新代码给你这个错误吗? – artm

0

假设这是SQL Server中,我会把它写成:

UPDATE s 
    SET weeklyScore = COALESCE(s.weeklyScore, 0) + 10, 
     totalScore = COALESCE(s.totalScore, 0) + 10 
FROM dbo.Scores s INNER JOIN 
    dbo.WeeklyPredictions wp 
    ON s.Id = wp.Id 
WHERE wp.Question1 = @0 AND wp.WeekNumber = @1;