Comment sauvegarder l'image dans la base de données en utilisant C# [fermé]

je veux enregistrer l'image de l'utilisateur dans une base de données en C#. Comment dois-je faire?

22
demandé sur r.r 2010-08-23 18:17:17

9 réponses

vous aurez besoin de sérialiser l'image à un format binaire qui peut être stocké dans une colonne SQL BLOB. En supposant que vous utilisez SQL Server, voici un bon article sur le sujet:

http://www.eggheadcafe.com/articles/20020929.asp

2
répondu Dave Swersky 2010-08-23 14:21:38

Essayez cette méthode. Il devrait fonctionner quand le champ quand vous voulez stocker l'image est de type bytea. D'abord, il crée byte[] pour l'image. Puis il le sauve DB en utilisant IDataParameter de type binary.

    public static void PerisitImage(string path, IDbConnection connection)
    {
        using (var command = connection.CreateCommand ())
        {
            Image img = Image.FromFile (path);
            MemoryStream tmpStream = new MemoryStream();
            img.Save (tmpStream, ImageFormat.Png); // change to other format
            tmpStream.Seek (0, SeekOrigin.Begin);
            byte[] imgBytes = new byte[MAX_IMG_SIZE];
            tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE);

            command.CommandText = "INSERT INTO images(payload) VALUES (:payload)";
            IDataParameter par = command.CreateParameter();
            par.ParameterName = "payload";
            par.DbType = DbType.Binary;
            par.Value = imgBytes;
            command.Parameters.Add(par);
            command.ExecuteNonQuery ();
        }
    }
19
répondu jethro 2010-08-23 14:48:10

vous voulez convertir l'image en byte[] en C#, et ensuite vous aurez la colonne de base de données varbinary(MAX)

après cela, c'est comme enregistrer n'importe quel autre type de données.

5
répondu Mike M. 2010-08-23 14:22:29

C'est une méthode qui utilise un contrôle FileUpload dans asp.net:

byte[] buffer = new byte[fu.FileContent.Length];
Stream s = fu.FileContent;
s.Read(buffer, 0, buffer.Length);
//Then save 'buffer' to the varbinary column in your db where you want to store the image.
4
répondu Abe Miessler 2010-08-23 14:36:53

vous pouvez enregistrer le chemin de l'image dans la base de données ou enregistrer l'image elle - même comme un BLOB ( tableau binaire d'octets)..cela dépend du cas que vous avez,si votre application est une application web,alors enregistrer le chemin de l'image est beaucoup mieux.mais si vous avez une application basée sur le client qui se connecte à une base de données centralisée,alors vous devez l'enregistrer comme binaire.

2
répondu Khaled 2010-08-23 14:22:52

Ma préférence personnelle n'est pas de sauvegarder les images dans une base de données en tant que telle. Enregistrer l'image quelque part dans le système de fichiers et enregistrer une référence dans la base de données.

2
répondu Jaydee 2010-08-23 14:52:25

puisque vous utilisez SQL, nous vous recommandons de ne pas utiliser adhoc ('writing statements in strings'), surtout si vous chargez une image.

ADO.NET peut faire tout le travail de cartographie, d'évasion, etc. pour vous.

soit créer une procédure stockée, soit utiliser SqlParameter pour faire la liaison.

comme le disent les autres posters, utilisez VARBINARY (MAX) car votre image de type de stockage est dépracée.

1
répondu StuartLC 2010-08-23 14:27:07

je pense que cette question valable est déjà répondue ici. Je l'ai essayé. Mon problème était simplement d'utiliser picture edit (de DevExpress). et c'est comme ça que je l'ai contourné:

  • changer la propriété Pictureedit" PictureStoreMode " en ByteArray: il est actuellement définie sur "par défaut" enter image description here
  • convertir la valeur d'édition du contrôle en bye: byte [] newImg = (byte[])pictureEdit1.EditValue;
  • enregistrer l'image: ce.tbSystemTableAdapter.qry_updateIMGtest (newImg);

Merci encore. Chagbert!--1-->

-1
répondu Chagbert 2014-04-14 07:31:27
//Arrange the Picture Of Path.***

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);

                    string[] PicPathArray;
                    string ArrangePathOfPic;

                    PicPathArray = openFileDialog1.FileName.Split('\');

                    ArrangePathOfPic = PicPathArray[0] + "\\" + PicPathArray[1];
                    for (int a = 2; a < PicPathArray.Length; a++)
                    {
                        ArrangePathOfPic = ArrangePathOfPic + "\\" + PicPathArray[a];
                    }
               }

// Save the path Of Pic in database

                    SqlConnection con = new SqlConnection("Data Source=baqar-pc\baqar;Initial Catalog=Prac;Integrated Security=True");
                    con.Open();

                    SqlCommand cmd = new SqlCommand("insert into PictureTable (Pic_Path) values (@Pic_Path)", con);
                    cmd.Parameters.Add("@Pic_Path", SqlDbType.VarChar).Value = ArrangePathOfPic;

                    cmd.ExecuteNonQuery();

***// Get the Picture Path in Database.***

SqlConnection con = new SqlConnection("Data Source=baqar-pc\baqar;Initial Catalog=Prac;Integrated Security=True");
                con.Open();

                SqlCommand cmd = new SqlCommand("Select * from Pic_Path where ID = @ID", con);

                SqlDataAdapter adp = new SqlDataAdapter();
                cmd.Parameters.Add("@ID",SqlDbType.VarChar).Value = "1";
                adp.SelectCommand = cmd;

                DataTable DT = new DataTable();

                adp.Fill(DT);

                DataRow DR = DT.Rows[0];
                pictureBox1.Image = Image.FromFile(DR["Pic_Path"].ToString());
-5
répondu Syed Baqar Hassan 2012-03-18 08:47:33