2010-11-02 114 views
0

我已經去編輯代碼 - >這絕不是一件好事!錯誤:名稱'名稱'在當前上下文中不存在

該代碼適用於MVC中的文件上傳器。事情是我一次上傳兩個文件,這意味着它們被插入到數據庫中的不同行中。這是原代碼:

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(); 
    } 

這是我嘗試在修改代碼以單獨採取的文件,而不是使用一個循環,將它們插入到一個單一的行中的數據庫表:

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(); 
    } 

現在,我得到了以下錯誤每個cmd.Parameters.AddWithValue:

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

我假定這是因爲它是IF語句之外,但我停留在如何將位構造它。我最終希望使用linq將文件插入到數據庫中,因爲上述方法並不理想,但我現在的主要目標是讓這一點起作用。 任何幫助將不勝感激:)

回答

1

您需要在if條件作用域之外聲明變量。例如

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,我認爲有更好的方法來處理這個多文件上傳,但上面是處理你的問題最簡單的方法。)

+0

Kaliatech你好,是的,我敢肯定,一定有。我跟着一個教程,然後嘗試編輯它自己,這已經造成了一堆東西! :)我聲明瞭IF語句之外的變量,但現在cmd.Parameters.AddWith值方法拋出以下錯誤:「使用未分配的局部變量'fileDataPDF' – 109221793 2010-11-02 12:21:21

+0

您可以通過簡單地將空值分配給它聲明的變量是:「byte [] fileDataPDF = null;」。但是,我寫了答案,正如我所做的那樣強調,如果條件沒有發生,那麼以後在代碼中可能會遇到問題。你想要發生,你也可以用「byte [] fileDataPDF = new byte [0]」來初始化變量,以避免NullReferenceException。 – kaliatech 2010-11-02 13:38:36

0

你需要聲明ifData語句外的fileDataPDF,否則它只對if塊可見。

0

如何byte[] fileDataPDF;之前如果 和fileDataPDF = new byte[fileLengthPDF];裏面如果?

相關問題