错误:当前上下文中不存在名称“名称”

时间:2010-11-02 12:01:42

标签: c# sql if-statement

我已经去编辑代码了 - >这绝不是一件好事!

代码用于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收到以下错误:

  

名称'fileDataPDF'不存在   在当前的背景下

我认为这是因为它不在IF语句之内,但我对如何构造它有点困惑。我最终想使用linq将文件插入到数据库中,因为上面的方法并不理想,但我现在的主要目的是让这一点工作。 任何帮助将非常感激:)

3 个答案:

答案 0 :(得分:1)

您需要在if条件范围之外声明变量。 e.g。

    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,我认为有更好的方法可以处理这个多文件上传,但上面是解决问题的最简单方法。)

答案 1 :(得分:0)

您需要在if语句之外声明fileDataPDF,否则它只对if块可见。

答案 2 :(得分:0)

如果之前byte[] fileDataPDF;怎么样? 和fileDataPDF = new byte[fileLengthPDF];里面的if?