2017-04-05 27 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;