0

私は MVC3 で複数のファイルのアップロードを実装しています。実装に成功しました。データベースにも値を挿入する必要があります。モデル クラスにはリストがあります。データベースに挿入する際に問題がありました。エントリ、私はこの問題を修正しました。現在、最初の画像のみがデータベースに挿入されているという問題が発生しています。以下は私のコードです

 public ActionResult CreateCard(FlashCardsModel model, IEnumerable<HttpPostedFileBase> files)
        {
            string path = "";
            string upath = ConfigurationManager.AppSettings["imgpath"];          
            long SetId = 0;
            for (int i = 0; i < model.GroupIds[0].Split(',').Length; i++)
            {
                model.Visibleto = Convert.ToInt32(model.Privacy);
                var groupid = Convert.ToInt64(model.GroupIds[0].Split(',')[i]);
                SetId = Repository1.CreateSet(model.Title, model.Description, model.Visibleto, Convert.ToInt64(Session["uid"].ToString()), groupid);
                if (SetId != 0)
                {                    
                    foreach (var item in model.CardContent)
                    {
                        foreach (var file in files)
                        {
                            if (file != null && file.ContentLength > 0)
                            {
                                if (file.ContentLength > 0)
                                {
                                    var fileName = Path.GetFileName(file.FileName);
                                    if (IsImage(file.FileName.ToString()))
                                    {
                                        fileName = "FlashCard_Image_" + Session["uid"].ToString() + "_" + fileName;
                                        path = Path.Combine(Server.MapPath(upath), fileName);
                                        file.SaveAs(path);

                                        item.ImagePath = fileName;
                                        if (item.Answer != null && item.Term != null)
                                        {
                                            var savecontent = Repository1.AddCardContent(item.Term, item.Answer, item.ImagePath, SetId);
                                            break;//It breaks the loop but when it comes to foreach (var file in files) its taking first image each time
                                        }                                        
                                    }
                                    else
                                    {
                                        TempData["Errors"] = "Only JPEG,GIF and PNG images are allowed";
                                        return View("CreateFlashCardSet", model);
                                    }
                                }
                            }                          

                        }
                    }              
                }
            }

            TempData["Success"] = "Card Created Successfully";
            return View("CreateFlashCardSet", model);
        }

ループを中断しますが、中断後、foreach (ファイル内の var ファイル) に関しては、毎回最初のイメージを取得します。この問題を処理する方法

4

1 に答える 1

0

まず、データベースにデータを保存する方法が間違っていると思います。ファイルのリストをループしてデータベースに保存する必要はありません。ファイルをXML形式の文字列でSQLサーバーに送信し、SQLサーバーで単一のクエリを使用してデータを挿入できるためです。C# で次のような XML 文字列を生成したとします。

string files=   "<files>
  <file>
     file1 path
  </file>
  <file>
     file2 path
  </file>
  <file>
      file3 path
  </file>
     .
     .
     .
   <file>
      file4 path
  </file>
</files>";

ストア プロシージャでは、最初にこの xml 文字列を保持する XML 変数を宣言してから、次のように挿入クエリを記述します。

@FileId int,
@FileNamesXML xml

      INSERT INTO tablename(FileId, FileName ) SELECT @FileId,FileList.value('.[1]', 'varchar(500)') AS FileNames       
FROM @FileNamesXML.nodes('//FileNames/FileName') AS R(FileList)  

上記のソリューションを使用すると、サーバー側でリストをループすることなく、単一のクエリでファイルのリスト全体を挿入できます。これがあなたを助けることを願っています。

于 2013-05-01T09:37:13.400 に答える