2016-03-18 16 views
-2

Visual Studio ile çalışıyorum ve bir .CSHTML web sayfası yapıyorum. Kod, kod çalışıyordu. Bilinmeyen bir düzenleme ile mi? veya hata? (olası) Visual studio, son {} setini tanımayacaktır. {Burada C# koduVisual Studio C# kapanış parantezlerini belirleme

} @ ile başlayan olanları

Derleyici Hata: "Ayrıştırıcı hata iletisi: Kod bloğu kapanış eksik ''. Karakter Eğer eşleşen bir olduğundan emin olun"}} "Herkes için karakter '{' Bu blok içinde karakterler ve hiçbirinin '}' karakterleri biçimlendirme olarak yorumlanır ediliyor

Kaynak hatası:.

Satır 2:
Hat 3:
Satır 4: @ { Satır 5: var db = Veritabanı.Open ("DevDbCS"); Hat 6:..
"

Ben kopyası var ve birini seçerseniz, ilgili ayraç vurgular not defteri ++ için kodumu yapıştırılan ben, tüm frenler açılış ve kapanış doğru ben bile İşleme içine düştüğünü doğruladı (alışkanlık derleme) ama çok tüm iyi diyor.

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

      } 

     } 
    } 

o bana söyler html benim! DOCTYPE aldığında "tipi veya ad alanı adı 'DOCTYPE') .... bulunamadı edilemedi Muhtemelen, kapanış parantezinin nerede olduğunu anlayamadığı için.

Neredeyim yanlış gittim? Tüm parantez doğru olduğu için derleyiciler mesajı yararlı olmadığından çok sinir bozucu!

+0

Belki de bu bloğun dışında bir parazite engel olur mu? – Dispersia

+6

Lütfen dizgi birleştirme yerine parametrelenmiş SQL deyimlerini kullanın. Uygulamanızı SQL enjeksiyon güvenlik açıklarına açıyorsunuz. –

+5

Bir Razor görünümü içinde karmaşık kod yazmak, genellikle derleyicinin işaretleme ve kod bloklarıyla uğraşmaya çalıştığı ve birisinin kafasının karıştığı için bu sorunlara yol açacaktır. Kısacası, bunu yapma. Kodun denetleyiciye ya da kodun arkasına (ya da daha iyisi UI tarafından çağrılan diğer sınıflara) dikkat edin, böylece derleyici yalnızca kodla uğraşmak zorundadır. – dbugger

cevap

3

bu satırda eşittir işareti ve db değişken arasındaki Açma parantezi kaldırmak deneyin:

var RecordCount2 = (db.Query .... 

Bu eşleşen bir kapatma ayracı yok. Bu nedenle, derleyici küme parantezlerini daha sonra açılı olanlarla eşleştiremez ve yanıltıcı bir hata gösterebilir

+1

Sadece iyi maç görünüyor: var sqlMixing = (db.Query (" SELECT * FROM YieldMixing WHERE ThorneID = '"+ ThorneID + . "'")) () Dökme ToArray (.); –

+1

Haklısınız @Dan Orlovsky Tüm bu db.Query satırları ile karıştırılmış ve yanlış bir kaynak kodundan kopyaladım. Cevabı değiştirdim ve doğru çizgiyi dahil ettim –

+0

@AndreKraemer Teşekkür ederim! Adamsın! – tcox