Member 11774405 Ответов: 1

Как вставить разные изображения в одну строку базы данных на языке Си#


Я попробовал этот код для сохранения нескольких изображений, но в базе данных изображения хранятся в нескольких строках с одним и тем же идентификатором. Например, выбраны три изображения, а затем сгенерированы три временные строки с одинаковым идентификатором 1.

как сохранить эти три разных изображения в одной строке с несколькими столбцами и одним идентификатором?

Что я уже пробовал:

foreach (HttpPostedFile postedFile in FileUpload1.PostedFiles)
{
    string filename = Path.GetFileName(postedFile.FileName);
    string contentType = postedFile.ContentType;
    using (Stream fs = postedFile.InputStream)
    {
        using (BinaryReader br = new BinaryReader(fs))
        {
            byte[] bytes = br.ReadBytes((Int32)fs.Length);
            string bitString = BitConverter.ToString(bytes).Length.ToString();  

            string constr = ConfigurationManager.ConnectionStrings["cstring"].ConnectionString;
            using (OleDbConnection con = new OleDbConnection(constr))
            {
                string query = "insert into tblFiles values (@Name, @ContentType, @Data)";
                using (OleDbCommand cmd = new OleDbCommand(query))
                {
                    cmd.Connection = con;
                    cmd.Parameters.AddWithValue("@Name", filename)+
                    cmd.Parameters.AddWithValue("@ContentType", contentType)+
                    cmd.Parameters.AddWithValue("@Data", bitString);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
    }
}

Response.Redirect(Request.Url.AbsoluteUri);

Richard Deeming

Это зависит от структуры таблицы базы данных - вам нужно будет иметь три столбца изображений в таблице, чтобы хранить три изображения в одной строке.

Но это почти наверняка неправильно.

1 Ответов

Рейтинг:
11

OriginalGriff

Чтобы вставить несколько изображений - или любые другие "множественные данные" - в одну и ту же строку БД, необходимо выполнить одну инструкцию INSERT, содержащую все элементы данных, и сохранить каждый из них в отдельном предопределенном столбце. Вы не можете хранить "несколько объектов" в одном столбце одной и той же строки (или, по крайней мере, вы не можете без того, чтобы ваша БД не превратилась в питу для использования).

И я предполагаю, что это не то, что вы хотите на практике.
Что бы я сделал, так это взял два стола:
tblFiles с вашим существующим идентификатором, именем и типом контента.
tblImages с отдельным идентификатором, меткой даты и времени, данными изображения и внешним ключом к идентификатору в tblFiles.

Таким образом, вы можете получить все изображения для имени с помощью простого соединения:

SELECT f.Name, i.Data, i.TimeStamp FROM tblFiles f
JOIN tblImages i ON i.FileID = f.ID
WHERE f.Name LIKE '%Christmas Party%'
И каждое изображение будет возвращено в виде одной строки.


Member 11774405

Ладно, теперь я попробую вот так, и посмотрим, что получится. Спасибо.