C # Сохранение изображения в базу данных (не работает) - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь сохранить обложку песни в базе данных с изображением типа строки.В настоящее время ничего не сохраняется, я заполняю этот запрос в базе данных, но другие мои запросы работают нормально.

 public void AddSong(string names, string artists, string bands, string album, string strFilePath, string strlyrics, string strmp3)
    {


        if (strFilePath != null)
        {
            Image temp = new Bitmap(strFilePath);
            MemoryStream strm = new MemoryStream();
            temp.Save(strm, System.Drawing.Imaging.ImageFormat.Jpeg);
            ImageByteArray = strm.ToArray();
        }

        SqlConnection con = new SqlConnection(ConnectionString);

        //SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Ruben\Documents\dbPlatenCompany.mdf;Integrated Security = True; Connect Timeout = 30");
        string query = "INSERT INTO [tblSongs] ([Name], [Artist], [Band], [Album], [Cover], [lyrics], [mp3]) VALUES ('" + names + "','" + artists + "','" + bands + "','" + album + "', @IMG,'" + strlyrics + "','" + strmp3 + "')";
        SqlCommand cmd = new SqlCommand(query, con);

        try
        {
            con.Open();
            cmd.Parameters.Add(new SqlParameter("@IMG", ImageByteArray));
            cmd.BeginExecuteNonQuery();
            MessageBox.Show("gelukt");

        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

РЕДАКТИРОВАТЬ: я получаю, что хранение изображения в базе данных, вероятно, не лучший способ пойтиоб этом.Но это небольшой проект для школы, поэтому в нем будет всего около 4 изображений.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

См. Код ниже.Я надеюсь, что это поможет - (я только добавил код для сохранения изображения в БД)

        FileStream fs = new FileStream(selectedFile, FileMode.Open, FileAccess.Read);
        byte[] bimage = new byte[fs.Length];
        fs.Read(bimage, 0, Convert.ToInt32(fs.Length));

        SqlConnection cn;
        cn = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Integrated 
        Security=True");
        cn.Open();
        SqlCommand cmd = new SqlCommand("insert into MyTable (Image) 
        values(@imgdata)", cn);
        cmd.Parameters.AddWithValue("@imgdata", SqlDbType.Image).Value = bimage;
        cmd.ExecuteNonQuery();
        cn.Close();
0 голосов
/ 17 декабря 2018

Объявите параметр, имеющий тип Image или VarBinary, и длину, достаточную для его хранения.Вы также можете попытаться объявить длину параметра как 0 ..

cmd.Parameters.Add("@IMG", SqlDbType.Image, ImageByteArray.Length).Value =  ImageByteArray);
cmd.Parameters.Add("@IMG", SqlDbType.VarBinary, ImageByteArray.Length).Value =  ImageByteArray);

Обратите внимание, что SqlDbType.Image не имеет ничего общего с данными изображения (png, jpeg и т. Д.) - это SQLServer, для которого говорят "до2 гигабайта двоичных данных ».Вы можете сохранить MP3, документ Word и т. Д. В параметре типа изображения

Вы должны рассмотреть возможность параметризации других переменных, пока вы это делаете ...

Редактировать: уделить должное вниманиек ресурсу, связанному в комментарии, и рассмотрите НЕ хранить эти данные в двоичном столбце вообще

...