一次在数据库中保存多个图像路径URL

时间:2013-07-23 08:42:32

标签: asp.net sql-server c#-2.0 image-uploading

我的多张图片上传代码运行正常。但是,在数据库中插入图像路径URL时,只保存一个图像路径。如何一次保存所有图像路径网址。

这是我的GetPictureData()

public string GetPictureData()
{
    string retFileName = "";
    try
    {
        if (((FileUpload1.PostedFile != null)))
        {
            if ((FileUpload1.PostedFile.ContentType.ToUpper().Contains("IMAGE")))
            {
                HttpFileCollection hfc = Request.Files;
                for (int i = 0; i < hfc.Count; i++)
                {
                    HttpPostedFile hpf = hfc[i];
                    if (hpf.ContentLength > 0)
                    {
                        //Stream inStream = hpf.InputStream;
                        //byte[] fileData = new byte[hpf.ContentLength];
                        //inStream.Read(fileData, 0, hpf.ContentLength);

                        String sTimeStamp = GetTimeStamp();
                        string iFileName = System.IO.Path.GetFileName(hpf.FileName);
                        string newFileName = iFileName.Replace(" ", "_");
                        string OutFile = Server.MapPath(ConfigurationManager.AppSettings["LocalImageDirectory"]) + "\\" + sTimeStamp + "_" + newFileName;
                        hpf.SaveAs(OutFile);
                        OutFile = ConfigurationManager.AppSettings["LocalImageDirectory"] + "\\" + sTimeStamp + "_" + newFileName;
                        retFileName = OutFile;
                    }
                }
            }
        }
    }
    catch(Exception ex)
    {
        string msg = ex.Message;
        Response.Write(msg);
    }

    return retFileName;

}

这是我的UploadButton代码

    protected void btnUpload_Click(object sender, EventArgs e)
{
    if (Session["localauctionid"] != null && Session["localauctionid"].ToString() != "")
    {

        string filepath = GetPictureData();

            if (filepath != "")
            {
                string sqlcommand = " insert into auctionimages (auctionid, ImagePath, GalleryPic) values(" + Session["localauctionid"].ToString() + ",'" + filepath + "', 0);" +
                                    " update auctionstep1 set ListingStatus = 'Photographed' where auctionid = " + Session["localauctionid"].ToString() + " and (listingstatus <> 'Created' AND listingstatus <> 'Saved');";
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand cmd = db.GetSqlStringCommand(sqlcommand);
                db.ExecuteNonQuery(cmd);
                LoadImages();
            }




    }
}

由于

3 个答案:

答案 0 :(得分:1)

您的错误在于GetPictureData循环遍历文件集合,但只有最后一个文件返回到您调用保存到数据库代码的按钮事件。当然,只有最后一个文件将保存在数据库中。

解决方法是创建一个独立方法,以便在传递文件名和localAuctionID的数据库中保存。您可以在要保存的每个文件的GetPictureData(更正确地重命名为SavePictureData)内部循环中调用此方法

作为伪代码(未经测试)

private void SaveToDb(int localAutID, string filepath)
{
     string sqlcommand = " insert into auctionimages (auctionid, ImagePath, GalleryPic) " +
        "values(@auID, @file, 0); " +
        " update auctionstep1 set ListingStatus = 'Photographed' " + 
        "where auctionid = @auID and (listingstatus <> 'Created' " + 
        "AND listingstatus <> 'Saved');";
        Database db = DatabaseFactory.CreateDatabase();
        DbCommand cmd = db.GetSqlStringCommand(sqlcommand);
        DbParameter p1 = cmd.CreateParameter() 
                         {ParameterName="@auID", DbType=DbType.Int32, Value=localAutID};
        DbParameter p2 = cmd.CreateParameter() 
                         {ParameterName="@file", DbType=DbType.AnsiString, Value=filepath};
        db.ExecuteNonQuery(cmd);
}

如果SavePictureData在for循环中调用它

for (int i = 0; i < hfc.Count; i++)
{
    .....
    retFileName = OutFile;
    SaveToDb(Convert.ToInt32(Session["localauctionid"]), retFileName);
}

答案 1 :(得分:0)

if(Session [“localauctionid”]!= null&amp;&amp; Session [“localauctionid”]。ToString()!=“”)     {

    string filepath = GetPictureData();

        if (filepath != "")
        {
            string sqlcommand = " insert into auctionimages (auctionid, ImagePath, GalleryPic) values(" + Session["localauctionid"].ToString() + ",'" + filepath + "', 0);" +
                                " update auctionstep1 set ListingStatus = 'Photographed' where auctionid = " + Session["localauctionid"].ToString() + " and (listingstatus <> 'Created' AND listingstatus <> 'Saved');";
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand cmd = db.GetSqlStringCommand(sqlcommand);
            db.ExecuteNonQuery(cmd);
            LoadImages();
        }

答案 2 :(得分:0)

此人只点击一次上传按钮 - 因此只保存一张图片。

我个人会评估你编码的方式。我会将您用于将图像保存到数据库的代码移动到一个独立的方法,并在GetPictureData()

中完成图像上传时调用它