多个图像路径上传到MySQL数据库

时间:2017-07-24 09:38:32

标签: c# mysql asp.net

我有一个名为images的mysql表,包含MultipleImageID,MultipleImageName,MultipleImageMap和PropertyID(外键)。我遇到的问题是,当我上传它们时,实际上图像似乎重复但是列中填充了正确的信息。这是一张更好解释的图片。

[![http://i.imgur.com/oT5GETG.png]]

正如您所看到的,图像名称都不同,因为每个图像应该不同,但选择的第一个图像似乎会多次上传。其他时候会上传正确的图片,这让我感到很困惑。我的代码也没有错误。

这是我上传的c#。

protected void Insert(object sender, EventArgs e)
{
     string PropertyName = txtName.Text;
     string PropertyFeatures = txtPropFeat.Text;
     string PropertyLocation = txtPropLoc.Text;
     string PropertyInformation = txtPropInfo.Text;
     string PropertyNumBeds = txtNumBeds.Text;
     string PropertyPrice = txtPrice.Text;
     string PropertyType = txtPropType.Text;
     long InsertedID;

     string constr = ConfigurationManager.ConnectionStrings["realestatedbAddConString"].ConnectionString;

     using (MySqlConnection con = new MySqlConnection(constr))
     {
          using (MySqlCommand cmd = new MySqlCommand("INSERT INTO property (PropertyName, PropertyNumBeds, PropertyType, PropertyPrice, PropertyFeatures, PropertyLocation, PropertyInformation, ImageName, ImageMap) VALUES (@PropertyName, @PropertyNumBeds, @PropertyType, @PropertyPrice, @PropertyFeatures, @PropertyLocation, @PropertyInformation, @ImageName, @ImageMap)"))
          {
              using (MySqlDataAdapter sda = new MySqlDataAdapter())
              {
                  cmd.Parameters.AddWithValue("@PropertyName", PropertyName);
                  cmd.Parameters.AddWithValue("@PropertyNumBeds", PropertyNumBeds);
                  cmd.Parameters.AddWithValue("@PropertyPrice", PropertyPrice);
                  cmd.Parameters.AddWithValue("@PropertyType", PropertyType);
                  cmd.Parameters.AddWithValue("@PropertyFeatures", PropertyFeatures);
                  cmd.Parameters.AddWithValue("@PropertyLocation", PropertyLocation);
                  cmd.Parameters.AddWithValue("@PropertyInformation", PropertyInformation);

                  string FileName = Path.GetFileName(MainImageUploada.FileName);
                  MainImageUploada.SaveAs(Server.MapPath("ImagesUploaded/") + FileName);

                  cmd.Parameters.AddWithValue("@ImageName", FileName);
                  cmd.Parameters.AddWithValue("@ImageMap", "ImagesUploaded/" + FileName);

                  cmd.Connection = con;
                  con.Open();
                  cmd.ExecuteNonQuery();
                  InsertedID = cmd.LastInsertedId;
                  con.Close();
                }
            }
        }

        if (ImageUploada.HasFiles)
        {
            foreach (var file in ImageUploada.PostedFiles)
            {
                string FileName1 = Path.GetFileName(ImageUploada.FileName);
                ImageUploada.SaveAs(Server.MapPath("ImagesUploaded/") + file.FileName);

                using (MySqlConnection con = new MySqlConnection(constr))
                {
                    using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, @InsertedID); "))
                    {
                        using (MySqlDataAdapter sda = new MySqlDataAdapter())
                        {
                             cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
                             cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
                             cmd.Parameters.AddWithValue("@InsertedID", InsertedID);

                             cmd.Connection = con;
                             con.Open(); 
                             cmd.ExecuteNonQuery();
                             con.Close();
                        }
                    }
                }

            }
        }

        txtName.Text = "";
        txtPropFeat.Text = "";
        txtPropInfo.Text = "";
        txtPropLoc.Text = "";
        txtNumBeds.Text = "";
        txtPrice.Text = "";
        txtPropType.Text = "";

        Label1.Visible = true;
        Label1.Text = "Property Added to Database Successfully!";

    }

我迷失了我的代码,数据库或我正在使用的图像。

1 个答案:

答案 0 :(得分:1)

你正在循环ImageUploada.PostedFiles,但是你忽略了这一点并调用ImageUploada本身的方法,这只会处理第一个文件。

因此,如果您上传多个文件,则保存在服务器上的所有文件都将是第一个文件的副本。

您需要更改代码以单独处理每个file

foreach (var file in ImageUploada.PostedFiles)
{
    string FileName1 = Path.GetFileName(file.FileName);
    file.SaveAs(Server.MapPath("ImagesUploaded/") + file.FileName);

    // ...
}