C # как я могу сохранить изображение в базу данных без использования диалога с файлом [duplicate]

К сожалению, нет простого ответа, поскольку сериализатор не знает, что сериализовать для интерфейса. Я нашел более полное объяснение того, как обходиться это на MSDN

21
задан r.r 25 August 2010 в 16:02
поделиться

9 ответов

2
ответ дан Dave Swersky 16 August 2018 в 12:03
поделиться

Это метод, который использует элемент управления FileUpload в 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.
3
ответ дан Abe Miessler 16 August 2018 в 12:03
поделиться

Я думаю, что этот действительный вопрос уже дан здесь. Я тоже попробовал. Моя проблема заключалась в простом редактировании изображений (от DevExpress). и вот как я его обошел:

  • Измените свойство PictureStoreMode в PictureEdit на ByteArray: в настоящее время он установлен на «по умолчанию» enter image description here [/g0]
  • преобразует значение редактирования элемента управления в bye: byte [] newImg = (byte []) pictureEdit1.EditValue;
  • сохранить изображение: this.tbSystemTableAdapter.qry_updateIMGtest (newImg);
]

Еще раз спасибо. Chagbert

-1
ответ дан Chagbert 16 August 2018 в 12:03
поделиться
2
ответ дан Jaydee 16 August 2018 в 12:03
поделиться

Попробуйте этот метод. Он должен работать, когда поле, когда вы хотите сохранить изображение, имеет тип bytea. Сначала он создает byte[] для изображения. Затем он сохраняет его с помощью IDataParameter типа 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 ();
        }
    }
18
ответ дан jethro 16 August 2018 в 12:03
поделиться
  • 1
    Для тех, кто читает это позже, DbType.Binary обрабатывает varbinary(MAX), хотя подсказка подсказки говорит, что она ограничена 8000 байтами. – Jon Seigel 16 December 2010 в 16:06

вы можете сохранить путь изображения в базе данных или сохранить изображение как BLOB (двоичный - массив байтов) .. это зависит от вашего случая, если ваше приложение является веб-приложением, а затем сохраните путь изображения намного лучше. Но если вы получили клиентское приложение, которое подключается к централизованной базе данных, вы должны сохранить его как двоичный.

2
ответ дан Khaled 16 August 2018 в 12:03
поделиться
  • 1
    Это должен быть комментарий. Пользователь попросит что-то еще. Если у вас есть критик метода, пожалуйста, используйте комментарий. – Leandro Tupone 6 May 2015 в 13:17

Вы захотите преобразовать изображение в byte[] в C #, а затем столбец базы данных будет varbinary(MAX)

. После этого он будет похож на сохранение любого другого типа данных .

5
ответ дан Mike M. 16 August 2018 в 12:03
поделиться

Поскольку вы используете SQL, рекомендуете не использовать adhoc («написание операторов в строках»), особенно учитывая, что вы загружаете изображение.

ADO.NET может выполнять всю тяжелую работу сопоставление, экранирование и т. д.

Либо создайте хранимую процедуру, либо используйте SqlParameter для привязки.

Как говорят другие плакаты, используйте VARBINARY (MAX) в качестве типа хранилища - IMAGE разваливается.

1
ответ дан StuartLC 16 August 2018 в 12:03
поделиться
//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
ответ дан Udo Held 16 August 2018 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: