我已經去編輯代碼 - >這絕不是一件好事!錯誤:名稱'名稱'在當前上下文中不存在
該代碼適用於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將文件插入到數據庫中,因爲上述方法並不理想,但我現在的主要目標是讓這一點起作用。 任何幫助將不勝感激:)
Kaliatech你好,是的,我敢肯定,一定有。我跟着一個教程,然後嘗試編輯它自己,這已經造成了一堆東西! :)我聲明瞭IF語句之外的變量,但現在cmd.Parameters.AddWith值方法拋出以下錯誤:「使用未分配的局部變量'fileDataPDF' – 109221793 2010-11-02 12:21:21
您可以通過簡單地將空值分配給它聲明的變量是:「byte [] fileDataPDF = null;」。但是,我寫了答案,正如我所做的那樣強調,如果條件沒有發生,那麼以後在代碼中可能會遇到問題。你想要發生,你也可以用「byte [] fileDataPDF = new byte [0]」來初始化變量,以避免NullReferenceException。 – kaliatech 2010-11-02 13:38:36