2016-03-18 57 views
-2

我正在使用Visual Studio製作一個.CSHTML網頁。 該代碼是工作代碼。通過一些未知的編輯?或錯誤?(不太可能) Visual Studio將無法識別最後一組{}。 與 @ {這裏的C#代碼Visual Studio C#不識別右花括號

}開始的那些

編譯器錯誤: 「分析器錯誤信息:代碼塊缺少右‘’字符請確保您有一個匹配的」}} 「字符的所有‘{’該塊內的字符,而且沒有一個‘}’字符被解釋爲標記

源錯誤:

第2行:
第3行:
第4行:@第012行:var db = Database.Open(「DevDbCS」); 6 行:

我有複製並粘貼我的代碼到記事本+ +,突出相應的支架,如果我選擇一個我已經證實,所有剎車打開和關閉正確我甚至把它丟進處理。 (編譯習慣),但它說,所有的好太多。

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

     var selectThorneID = "SELECT ThorneID, Status FROM Batch_Record WHERE Status = 'ACTIVE' ORDER BY ThorneID ASC"; 

     //Variables 
     var ThorneID = " "; 
     var frmInsertV = ""; 
     var frmInsert = ""; 
     var frmUpdate = ""; 
     var StartUnits = ""; 
     var EndUnits = ""; 
     var yield = ""; 
     var formValues = new double[29];//array for holding results from Query 
     var QC = ""; 
     int RecordCount = 0; 

     var sqlfrmValues = (db.Query("SELECT * FROM YieldEncap WHERE ThorneID = '" + ThorneID + "'")).Cast<DynamicRecord>().ToArray(); 


     if (IsPost) 
     { 

      switch (Request.Form["userInput"]) 
      { 
       case "Submit": 
        ThorneID = Request.Form["ThorneID"]; 
        StartUnits = Request.Form["s12"]; 
        EndUnits = Request.Form["s15"]; 
        yield = Request.Form["s17"]; 
        QC = Request.Form["QC"]; 

        //Set to zero to avoid trying to put nulls in DB 
        if (Request.Form["s12"] == null) 
        { 
         StartUnits = "0"; 
        } 
        else 
        { 
         StartUnits = Request.Form["s12"]; 
        } 

        if (Request.Form["s15"] == null) 
        { 
         EndUnits = "0"; 
        } 
        else 
        { 
         EndUnits = Request.Form["s15"]; 
        } 

        if (Request.Form["s17"] == null) 
        { 
         yield = "0"; 
        } 
        else { 
         yield = Request.Form["s17"]; 
        } 

        for (int i = 1; i <= 26; i++) 
        { 
         //set to 1 to keep NaN from appearing, cant divide by zero 
         var itemStr = "var" + i.ToString(); 
         var rfTemp = ""; 
         if (Request.Form[itemStr] == null) 
         { 
          rfTemp = "0"; 
          if (i == 3) 
          { 
           rfTemp = "1"; 
          } 
          if (i == 10) 
          { 
           rfTemp = "1"; 
          } 
          if (i == 16) 
          { 
           rfTemp = "1"; 
          } 

         } 
         else 
         { 
          rfTemp = Request.Form[itemStr]; 
         } 

         //put commas after 1st variable in the string for SQL 
         if (i != 1) 
         { 
          frmUpdate += ", "; 
          frmInsert += ", "; 
          frmInsertV += ", "; 
         } 


         frmUpdate += "s" + i + "= " + rfTemp; 
         frmInsertV += "s" + i; 
         frmInsert += rfTemp; 

        } 

        var UPSERTcommand = "IF EXISTS (SELECT * FROM YieldEncap WHERE ThorneID = '" + ThorneID + "') " 
             + "UPDATE YieldEncap SET " + frmUpdate + ", QC='" + QC + "' " 
             + "WHERE ThorneID = '" + ThorneID + "' " 
             + "ELSE " 
             + "INSERT INTO YieldEncap (ThorneID, QC, " + frmInsertV + ") " 
             + "VALUES (" + ThorneID + ", '" + QC + "', " + frmInsert + ")"; 
        db.Execute(UPSERTcommand); 


        UPSERTcommand = "IF EXISTS (SELECT * FROM BR_Details_Yield WHERE ThorneID = '" + ThorneID + "') " 
             + "UPDATE BR_Details_Yield SET Department = 'Encap', Units = 'g', StartUnits = '" + StartUnits + "', EndUnits = '" + EndUnits + "', Yield = '" + yield + "' " 
             + "WHERE ThorneID = '" + ThorneID + "' " 
             + "ELSE " 
             + "INSERT INTO BR_Details_Yield (Department, Units, StartUnits, EndUnits, Yield) " 
             + "VALUES ('Encap', 'Bottles', " + StartUnits + ", " + EndUnits + ", " + yield + ")"; 
        db.Execute(UPSERTcommand); 
        UPSERTcommand = ""; 

        sqlfrmValues = (db.Query("SELECT * FROM YieldEncap WHERE ThorneID = '" + ThorneID + "'")).Cast<DynamicRecord>().ToArray(); 
        RecordCount = (int)db.QueryValue("SELECT COUNT(*) FROM YieldEncap WHERE ThorneID = '" + ThorneID + "'"); 

        //read out the values from sqlfrmValues and place them in an array 
        if (RecordCount > 0) 
        { 
         for (int i = 1; i <= 26; i++) 
         { 
          if (sqlfrmValues[0][i] != null) 
          { 
           formValues[i] = Convert.ToDouble(sqlfrmValues[0][i]); 
          } 
          else 
          { 
           formValues[i] = 0; 
          } 

         } 
         QC = Convert.ToString(sqlfrmValues[0][27]); 
        } 
        else 
        { 
         formValues[2] = 1; 
         formValues[10] = 1; 
         formValues[16] = 1; 
         formValues[19] = 1; 
        } 

        break; 

       default: 
        ThorneID = Request.Form["ThorneID"]; 

        sqlfrmValues = (db.Query("SELECT * FROM YieldEncap WHERE ThorneID = '" + ThorneID + "'")).Cast<DynamicRecord>().ToArray(); 
        var RecordCount2 = (db.Query("SELECT COUNT(*) FROM YieldEncap WHERE ThorneID = '" + ThorneID + "'").Cast<DynamicRecord>().ToArray(); 

        if (RecordCount[0][0] > 0) 
        { 
         for (int i = 1; i <= 26; i++) 
         { 
          if (sqlfrmValues[0][i] != null) 
          { 
           formValues[i] = Convert.ToDouble(sqlfrmValues[0][i]); 
          } 
          else 
          { 
           formValues[i] = 0; 
          } 

         } 
         QC = Convert.ToString(sqlfrmValues[0][27]); 
        } 
        else 
        { 
         formValues[6] = 1; 
         formValues[8] = 1; 
         formValues[11] = 1; 
         formValues[24] = 1; 
        } 
        //lookup for previous worksheet. Starting point value 
        //var sqlMixing = (db.Query("SELECT * FROM YieldMixing WHERE ThorneID = '" + ThorneID + "'")).Cast<DynamicRecord>().ToArray(); 
        //var sqlMixingRecordCount = (int)db.QueryValue("SELECT COUNT(*) FROM YieldMixing WHERE ThorneID = '" + ThorneID + "'"); 
        //if (sqlMixingRecordCount > 0) 
        //{ 

        // var temp = Convert.ToDouble(sqlfrmValues[0][1]); 
        // formValues[1] = Convert.ToDouble(sqlMixing[0][1]); 

        //} 

        var sqlMixing = (db.Query("SELECT * FROM YieldMixing WHERE ThorneID = '" + ThorneID + "'")).Cast<DynamicRecord>().ToArray(); 
        RecordCount = (int)db.QueryValue("SELECT COUNT(*) FROM YieldMixing WHERE ThorneID = '" + ThorneID + "'"); 
        if (RecordCount > 0) 
        { 
         formValues[24] = Convert.ToDouble(sqlMixing[0][2]); 
         formValues[24] = formValues[24] * 1000; 
        } 

        break; 

      } 

     } 
    } 

當它到達我的!DOCTYPE HTML它告訴我「之類或命名空間名稱‘DOCTYPE’無法找不到....) 可能是因爲它無法確定右大括號的位置。

我哪裏出錯了?編譯器消息不是很有幫助,因爲所有的大括號都是正確的,這是非常令人沮喪的!

+0

也許它是這個塊之外的一個支撐,它會干擾? – Dispersia

+6

請使用參數化的SQL語句而不是字符串連接。您正在打開您的應用程序直到SQL注入漏洞。 –

+5

在Razor視圖中編寫複雜代碼通常會導致這些問題,因爲編譯器正在試圖處理標記和代碼塊,並且有人會感到困惑。總之,不要這樣做。將代碼拖入控制器或代碼後面(或者更好的是由UI調用的其他類),因此編譯器只需處理代碼。 – dbugger

回答

3

儘量去除等號和分貝變量之間的開括號在這條線:

var RecordCount2 = (db.Query .... 

這不具有匹配的右括號。因爲編譯器無法將大括號與之後的大括號匹配並顯示誤導性錯誤

+1

似乎匹配得很好︰var sqlMixing =(db.Query(「SELECT * FROM YieldMixing WHERE ThorneID ='」+ ThorneID + 「」「))鑄()ToArray的(); –

+1

你是對的@丹Orlovsky我已經混淆了所有這些db.Query行,並從源代碼複製錯誤的。我改變了答案,幷包含正確的行 –

+0

@AndreKraemer謝謝!你這個人! – tcox