2015-11-10 2 views
2

J'ai DataSet qui contiennent Image.comment obtenir Image à partir de DataSet

J'ai besoin de sauvegarder cette image en fichier.

i essayer ceci:

SQL = ItemCode,PIC from ROW; 
dsView = new DataSet(); 
adp = new SqlCeDataAdapter(SQL, Conn); 
adp.Fill(dsView, "ROW"); 
adp.Dispose(); 
foreach (DataRow R in dsROW.Tables[0].Rows) 
{ 
ItemCode = R["ItemCode"].ToString().Trim() ; 
TEMP = R["PIC"].ToString().Trim(); 
Image image = R["PIC"] as Image; 
if(image != null) 
{ 
    MemoryStream ms = new MemoryStream(); 
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
    byte[] imagedata = ms.ToArray(); 
    } 

, mais l'image est toujours null

et TEMP je vois System.Byte []

besoin d'aide, grâce

Répondre

0

Votre R["PIC"] est un tableau ou des octets. D'abord, vous essayez d'appliquer ToString(), et vous obtenez simplement System.Byte[]. Ensuite, vous essayez de le convertir en Image. Comment Byte[] est-il supposé cast à Image?

Vous devez créer un Image de votre tableau Byte:

dsView = new DataSet(); 
adp = new SqlCeDataAdapter(SQL, Conn); 
adp.Fill(dsView, "ROW"); 
adp.Dispose(); 
foreach (DataRow R in dsROW.Tables[0].Rows) 
{ 
    ItemCode = R["ItemCode"].ToString().Trim(); 

    using (var ms = new MemoryStream(R["PIC"])) 
    { 
     Image image = Image.FromStream(ms); 
     image.Save($"C:\\Output\\YourCustomPath\\{ItemCode}.jpeg", ImageFormat.Jpeg); 
    } 
} 
0

Vous devez lire les données en mode d'accès séquentiel. Voici un exemple que j'utilise pour lire des données binaires. Voir l'utilisation de SqlDataReader rdr = cmd.ExecuteReader (CommandBehavior.SequentialAccess);

extrait:

string sql = "Select file_data from utils where util_id="+uID.ToString()+";"; 
SqlCommand cmd = new SqlCommand(sql, database._sqlConnection); 
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess); // CommandBehavior.SequentialAccess: read columns in order and every column only once! 
int columnNr = 0; 
byte[] filedata = null; 
try 
{ 
    while (rdr.Read()) 
    { 
//load the binary data 
if (rdr.IsDBNull(columnNr)) //is there any binary data? //LAST COLUMN!!!!! 
filedata = null; 
else 
{ 
    //read binary data 
    int bufferSize = 100; // Size of the BLOB buffer. 
    byte[] outbyte = new byte[bufferSize]; // The BLOB byte[] buffer to be filled by GetBytes. 
    long retval; // The bytes returned from GetBytes. 
    long startIndex = 0; // The starting position in the BLOB output. 
    MemoryStream ms = new MemoryStream(); 
    BinaryWriter bw = new BinaryWriter(ms); 
    // Reset the starting byte for the new BLOB. 
    startIndex = 0; 
    // Read the bytes into outbyte[] and retain the number of bytes returned. 
    retval = rdr.GetBytes(columnNr, startIndex, outbyte, 0, bufferSize); 
    // Continue reading and writing while there are bytes beyond the size of the buffer. 
    while (retval >0) //== bufferSize) 
    { 
    bw.Write(outbyte); 
    bw.Flush(); 
    // Reposition the start index to the end of the last buffer and fill the buffer. 
    startIndex += bufferSize; 
    retval = rdr.GetBytes(columnNr, startIndex, outbyte, 0, bufferSize); 
    } 
    bw.Close(); 
    filedata = ms.ToArray(); 
    ms.Close(); 
} 
    } 
} 
catch (SqlException ex)