2016-03-18 16 views
-2

Visual Studioで.CSHTML Webページを作成しています。 コードは動作していたコードです。いくつかの未知の編集を通して?またはバグ?(おそらく) ビジュアルスタジオは{}の最後のセットを認識しません。 {ここで、C#コードVisual Studio C#で閉じ括弧が認識されない

} @ で始まる もの

コンパイラエラー: 「パーサーエラーメッセージ:コードブロックが終了不足している 『』。文字を使用すると、マッチングを持っていることを確認してください」}} 「全ての文字 『{』は、このブロック内の文字とのいずれも 『}』の文字は、マークアップとして解釈される

ソースエラー:

2行目:
3行目:
行4:@ { 行5:var db = Database.Open( "DevDbCS"); 6行目:。。

私はコピーを持っていると私は1つを選択した場合、対応するブラケットを強調してメモ帳++への私のコードを貼り付けたが、私は、すべてのブレーキ開閉が正しく私も処理にそれを落としていることが確認されています(文句を言わないコンパイル)が、それはあまりにもすべて良いと言う。

@{ 
     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

は、この行に等号とDB変数間のかっこを削除しよう:

var RecordCount2 = (db.Query .... 

これは、一致する閉じ括弧がありません。そのため、コンパイラは中括弧をその後の中括弧に一致させることができず、誤ったエラーを表示します。

+1

は良いだけに一致するようです:var sqlMixing =(db.Query(" SELECT * FROM YieldMixing WHERE ThorneID = '"+ ThorneID + ")"))。キャスト()。ToArray(); –

+1

あなたは正しいです@Dan Orlovsky私はこれらのdb.Queryのすべての行と混ざり合って、ソースコードから間違った行をコピーしました。私は答えを変更し、正しい行を含める –

+0

@AndreKraemerありがとう!あなたは男! – tcox

関連する問題