Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

c# хранение изображений в ms sql c#

Tanya Hohlova Ученик (79), закрыт 12 лет назад
Прога копирует фотографии в базу данных, но она выбирает только один файл мне же нужно чтобы загружала большее количество файлов. Код:

browse images:

private void btnBrowseImage_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Multiselect = true;
openFileDialog1.Title = "Sekili sec";

openFileDialog1.InitialDirectory = "E:\\IKA";
openFileDialog1.Filter = "All files (*.jpg)|*.jpg";
// openFileDialog1.FilterIndex = 10;
openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
txtImagePath.Text = openFileDialog1.FileName;
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}

byte[] ReadImageToBytes(string sPath)
{
//Initialize byte array with a null value initially.
byte[] data = null;

//Use FileInfo object to get file size.
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;

//Open FileStream to read file
FileStream fStream = new FileStream(sPath, FileMode.Open,
FileAccess.Read);

//Use BinaryReader to read file stream into byte array.
BinaryReader br = new BinaryReader(fStream);

data = br.ReadBytes((int)numBytes);
return data;
}

saving them in sql:

private void btnSave_Click(object sender, EventArgs e)
{
try
{
//Read Image Bytes into a byte array
byte[] imageSampleData = ReadImageToBytes(txtImagePath.Text);

//Initialize SQL Server Connection
// SqlConnection con = new SqlConnection(txtConnectionString.Text);

String strConnString = "Data Source=1.1.1.1;Initial Catalog=Test1;User Id=dffr;Password=dffr;";
SqlConnection con = new SqlConnection(strConnString);
//Set insert query
string query = "INSERT INTO tblImages (FullPath,MyImageSample) values(@FullPath, @MyImageSample)";

//Initialize SqlCommand object for insert.
SqlCommand cmd = new SqlCommand(query, con);

cmd.Parameters.Add(new SqlParameter("@FullPath",
(object)txtImagePath.Text));

cmd.Parameters.Add(new SqlParameter("@MyImageSample",
(object)imageSampleData));

//Open connection and execute insert query.
con.Open();
cmd.ExecuteNonQuery();
con.Close();

}
catch
{
MessageBox.Show("Error while saving image.", "Error");
}
}
Лучший ответ
Вася Пупкин Гуру (4505) 12 лет назад
txtImagePath.Text = openFileDialog1.FileName;
Тут ты у openFileDialog1 спрашиваешь путь к файлу.
Но у тебя же
openFileDialog1.Multiselect = true;
т. е. диалог позволяет выбрать несколько файлов.
Поэтому надо делать что-то типа
string[] pathes = openFileDialog1.FileNames;
А потом циклом для каждого pathes [ i ] сохранять картинку в базу.
Остальные ответы
Александр Краповницкий Мыслитель (8375) 12 лет назад
Хранить изображения в базе данных самый не рекомендованный способ. В MS SQL есть хранение файлов связанных с базой данных. Это тип данных специальный, уж точно не byte [ ]

Хранить надо всё на жёстком диске. А в базе иметь ссылку на файл на диске. Это отлично работает в 100% случаев.

А то как вы хотите сделать было реализовано на сайте molotok . ru, после падения производительности сайт был переписан почти с нуля. Теперь картинки хранятся в папках на диске.
Похожие вопросы