travailler avec des images en tant que colonne de table de database

J'ai une database (sql server 2008) et je travaille avec c # dans Visual Studio 2010.

Je veux établir une connection avec mon DB. J'ai écrit un code pour cela comme suit:

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(); 

Je ne sais pas comment aller plus loin. Je veux dire comment extraire la colonne du lecteur après l'exécution des déclarations ci-dessus? De plus, je dois parcourir toute la colonne ligne par ligne et convertir chaque image en un élément IContent. Dois-je écrire mon propre convertisseur pour cela ou y a-t-il des classs .NET qui le font déjà?

Voici le scénario. J'ai une table avec 20 colonnes dont l'une est la colonne images_column. Cette colonne est la seule colonne contenant des images stockées en tant que données binarys. Les colonnes remainig sont des entiers habituels (sa valeur de taille) et des strings (son nom, son location, etc.) associées à cette image particulière. J'espère que c'est clair maintenant.

Merci.

  ssortingng conn = "Data Source=servername\\SQL2008; Initial Catalog=MyData;UID=MyID;PWD=mypassword;"; using (SqlConnection dbConn = new SqlConnection(conn)) { dbConn.Open(); ssortingng 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)); } } } } 

Selon la façon dont vous enregistrez l'image dans la database, vous pouvez les extraire à l'aide de la class Bitmap . Il prend plusieurs arguments différents à ses constructors, entre autres un stream par exemple.

Vous obtenez datatables du lecteur en utilisant sa fonction Read . Il vous donne un bool pour vous faire savoir si vous avez une ligne valide ou non. Vous pouvez l'utiliser dans une instruction if ou une instruction while.

Nourrir datatables de la colonne de database à un MemoryStream par exemple et le donner au constructor Bitmap.

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

Je ne suis pas sûr de votre question exactement ce que vous essayez d'accomplir, mais pour get l'image de la colonne en tant que Bitmap avec votre lecteur, vous pouvez utiliser ce qui suit.

 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 } }