работа с изображениями в качестве столбца таблицы базы данных

У Ii есть база данных (sql server 2008), и я работаю с c # в visual studio 2010.

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

SqlConnection mySqlConnection = new SqlConnection ("Data Source=servername\\SQL2008; Initial Catalog=MyData;UID=MyID;PWD=mypassword;"); SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); mySqlCommand.CommandText = "SELECT image_column FROM images_table "; mySqlConnection.Open(); SqlDataReader productsSqlDataReader = mySqlCommand.ExecuteReader(); 

Я не знаю, как двигаться дальше. Я имею в виду, как извлечь столбец из читателя после выполнения вышеуказанных утверждений? Также мне нужно пройти весь столбец подряд за строкой и преобразовать каждое изображение в элемент IContent. Должен ли я писать свой собственный конвертер для этого или есть какой-нибудь .NET-класс, который делает это уже?

Это сценарий. У меня есть таблица с 20 столбцами, одна из которых – image_column. Этот столбец является ТОЛЬКО столбцом, в котором есть изображения, хранящиеся в виде двоичных данных. Столбцы-остатки представляют собой обычные целые числа (его размерное значение) и строки (его имя, местоположение и т. Д.), Связанные с этим конкретным изображением. Надеюсь, теперь это ясно.

Благодарю.

      string conn = "Data Source=servername\\SQL2008; Initial Catalog=MyData;UID=MyID;PWD=mypassword;"; using (SqlConnection dbConn = new SqlConnection(conn)) { dbConn.Open(); string sql = "SELECT DATALENGTH(image_column), image_column FROM images_table "; using (SqlCommand cmd = new SqlCommand(sql, dbConn)) { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { int size = reader.GetInt32(0); byte[] buff = new byte[size]; reader.GetBytes(1, 0, buff, 0, size); MemoryStream ms = new MemoryStream(buff, 0, buff.Length); ms.Write(buff, 0, buff.Length); StoreImage(Image.FromStream(ms, true)); } } } } 

    В зависимости от того, как вы сохраняете изображение в базе данных, вы можете извлечь их, используя класс Bitmap . Для его конструкторов требуется несколько разных аргументов, в том числе, например, Stream.

    Вы получаете данные от читателя, используя функцию чтения . Это дает вам bool, чтобы вы знали, есть ли у вас допустимая строка или нет. Вы можете использовать это в инструкции if или while.

    Например, отправьте данные из столбца базы данных в MemoryStream и передайте это конструктору Bitmap.

     while (productsSqlDataReader.Read()) { MemoryStream stream = new MemoryStream((byte[])productsSqlDataReader["image_column"]); new Bitmap(stream); } 

    Я не уверен в вашем вопросе, что вы пытаетесь выполнить, но чтобы получить изображение из столбца в виде Bitmap с вашим читателем, вы можете использовать следующее.

     while (productsSqlDataReader.Read()) { byte[] buf = productsSqlDataReader["image_column"] as byte[]; using (MemoryStream ms = new MemoryStream(buf)) { Bitmap bmp = Bitmap.FromStream(ms); //do whatever with the bitmap BEFORE you dispose the stream } } 
    Давайте будем гением компьютера.