2010-11-02 7 views
0

Je suis allé modifier le code -> ce qui n'est jamais une bonne chose!Erreur: Le nom 'Nom' n'existe pas dans le contexte actuel

le code est pour un uploader de fichier dans MVC. Le fait était que je téléchargeais deux fichiers à la fois, ce qui signifiait qu'ils étaient insérés dans des lignes séparées dans une base de données. Voici le code d'origine:

public ActionResult Index() 
    { 
     ViewData["Message"] = "Convert your eBooks!"; 

     foreach (string upload in Request.Files) 
     { 
      if (!Request.Files[upload].HasFile1()) continue; 

      string mimeType = Request.Files[upload].ContentType; 
      Stream fileStream = Request.Files[upload].InputStream; 
      string fileName = Path.GetFileName(Request.Files[upload].FileName); 
      int fileLength = Request.Files[upload].ContentLength; 
      byte[] fileData = new byte[fileLength]; 
      fileStream.Read(fileData, 0, fileLength); 

      const string connect = @"Server=localhost;Database=Images;user id=taraw; password=siemensbs;"; 
      using (var conn = new SqlConnection(connect)) 
      { 
       var qry = "INSERT INTO FileStore (FileContent, MimeType, FileName) VALUES (@FileContent, @MimeType, @FileName)"; 
       var cmd = new SqlCommand(qry, conn); 
       cmd.Parameters.AddWithValue("@FileContent", fileData); 
       cmd.Parameters.AddWithValue("@MimeType", mimeType); 
       cmd.Parameters.AddWithValue("@FileName", fileName); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 

     return View(); 
    } 

Voici ma tentative de modifier le code afin de prendre dans les fichiers séparément plutôt que d'utiliser une boucle, et les insérer dans une seule rangée dans une table de base de données:

public ActionResult Index() 
    { 

     if (!Request.Files["FileUpload1"].HasFile1()) 
     { 
      string mimeTypePDF = Request.Files["FileUpload1"].ContentType; 
      Stream fileStreamPDF = Request.Files["FileUpload1"].InputStream; 
      string fileNamePDF = Path.GetFileName(Request.Files["FileUpload1"].FileName); 
      int fileLengthPDF = Request.Files["FileUpload1"].ContentLength; 
      byte[] fileDataPDF = new byte[fileLengthPDF]; 
      fileStreamPDF.Read(fileDataPDF, 0, fileLengthPDF); 
     } 

      if(!Request.Files["FileUpload2"].HasFile1()) 
     { 
       string mimeTypeCover = Request.Files["FileUpload2"].ContentType; 
       Stream fileStreamCover = Request.Files["FileUpload2"].InputStream; 
       string fileNameCover = Path.GetFileName(Request.Files["FileUpload2"].FileName); 
       int fileLengthCover = Request.Files["FileUpload2"].ContentLength; 
       byte[] fileDataCover = new byte[fileLengthCover]; 
       fileStreamCover.Read(fileDataCover, 0, fileLengthCover); 
     } 

      const string connect = @"Server=localhost;Database=Images;user id=taraw; password=siemensbs;"; 
      using (var conn = new SqlConnection(connect)) 
      { 
       var qry = "INSERT INTO Book (FileContentPDF, MimeTypePDF, FileNamePDF, FileContentCover, MimeTypeCover, FileNameCover) VALUES (@FileContentPDF, @MimeTypePDF, @FileNamePDF, @FileContentCover, @MimeTypeCover, @FileNameCover)"; 
       var cmd = new SqlCommand(qry, conn); 
       cmd.Parameters.AddWithValue("@FileContentPDF", fileDataPDF); 
       cmd.Parameters.AddWithValue("@MimeTypePDF", mimeTypePDF); 
       cmd.Parameters.AddWithValue("@FileNamePDF", fileNamePDF); 
        cmd.Parameters.AddWithValue("@FileContentCover", fileDataCover); 
       cmd.Parameters.AddWithValue("@MimeTypeCover", mimeTypeCover); 
       cmd.Parameters.AddWithValue("@FileNameCover", fileNameCover);   
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 

     return View(); 
    } 

maintenant, je reçois les erreurs suivantes pour chaque cmd.Parameters.AddWithValue:

The name 'fileDataPDF' does not exist in the current context

Je présume que cela est parce qu'il est en dehors des déclarations IF mais je suis un peu coincé sur la façon de le structurer. Je voudrais finalement utiliser linq pour insérer les fichiers dans la base de données car la méthode ci-dessus n'est pas idéale, mais mon objectif principal pour l'instant est de simplement faire fonctionner ce bit. Toute aide serait grandement appréciée :)

Répondre

1

Vous devez déclarer les variables en dehors des étendues if conditionnelles. par exemple.

string mimeTypePDF; 
    string fileNamePDF; 
    byte[] fileDataPDF; 

    if (!Request.Files["FileUpload1"].HasFile1()) 
    { 
     mimeTypePDF = Request.Files["FileUpload1"].ContentType; 
     Stream fileStreamPDF = Request.Files["FileUpload1"].InputStream; 
     fileNamePDF = Path.GetFileName(Request.Files["FileUpload1"].FileName); 
     int fileLengthPDF = Request.Files["FileUpload1"].ContentLength; 
     fileDataPDF = new byte[fileLengthPDF]; 
     fileStreamPDF.Read(fileDataPDF, 0, fileLengthPDF); 
    } 

(FWIW, je pense qu'il ya de meilleures façons de gérer ce téléchargement multifichier, mais la façon la plus simple est ci-dessus pour traiter votre question.)

+0

Salut Kaliatech, Oui, je suis sûr il doit y avoir. J'ai suivi un tutoriel et j'ai ensuite essayé de l'éditer moi-même ce qui a fait un tas de choses !! :) J'ai déclaré les variables en dehors de l'instruction IF, cependant maintenant la méthode de valeur cmd.Parameters.AddWith jette l'erreur suivante: "Utilisation de la variable locale non affectée 'fileDataPDF' – 109221793

+0

Vous pouvez contourner l'erreur du compilateur en affectant simplement une valeur null à la variable où il est déclaré: "byte [] fileDataPDF = null;" Cependant, j'ai écrit la réponse comme je l'ai fait pour souligner que si le conditionnel ne se produit pas, alors vous pourriez avoir des problèmes plus tard dans votre code. vous voulez arriver, vous pouvez également initialiser la variable avec "byte [] fileDataPDF = new byte [0]" pour éviter l'exception NullReferenceException. – kaliatech

0

Vous devez déclarer fileDataPDF en dehors de l'instruction if, sinon elle n'est visible que pour le bloc if.

0

Que diriez-vous de byte[] fileDataPDF; avant si et fileDataPDF = new byte[fileLengthPDF]; à l'intérieur si?

Questions connexes