2013-04-04 3 views
0

J'ai deux bases de données chacune dans un projet (projet Winforms et service Web), et j'ai une requête avec Entity Framework pour envoyer des données du projet 1 au projet 2. Mon problème est de savoir comment convertir les images de la première base de données en chaîne pour l'envoyer via la requête?Comment convertir une image de SQL Server en chaîne?

Ceci est mon code de service Web:

// Entity Framework 
Person sd = new Person(); 
// Method to get data from winforms app 
public void GetData(string name,string picture) 
{ 
    sd.name= name; 
    sd.picture= ImageToByteArray(picture); 
    context.AddToPerson(sd); 
    context.SaveChanges(); 
} 

//Method to save the image into database 
private Byte[] ImageToByteArray(string source) 
{ 
    FileInfo fInfo = new FileInfo(source); 
    long sizeByte = fInfo.Length; 
    FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read); 
    BinaryReader br = new BinaryReader(fs); 
    byte[] data = br.ReadBytes((int)sizeByte); 
    return data; 
} 

Et voici mon code Winforms:

WebService3SD.Service1SoapClient oService = new WebService3SD.Service1SoapClient(); 

private void SendData() 
{ 
    Driver dr = context.Drivers.FirstOrDefault(d => d.name == "name1"); 
    oService.GetData(dr.name,????);//here i have no idea what i have to do ?! 
} 

Pour que je besoin d'une méthode pour convertir l'image en une chaîne, alors s'il vous plaît si quelqu'un avoir une idée à ce sujet, je serai très apprécié.

+0

Il est clair 'GetData' attend' picture' être une chaîne * représentant un chemin vers un fichier sur le serveur *. (Il est passé au constructeur de 'FileInfo') Vous ne convertissez donc pas une image en chaîne, mais vous devez plutôt lui passer un chemin vers un fichier qui existe déjà sur le serveur. Si ce n'est pas ce que vous voulez, vous devez implémenter votre serveur afin qu'il ne fonctionne pas en fonction des chemins locaux. –

+0

Il semble être une bonne solution ** Kirk ** mais comment puis-je le code – Mohammadov

Répondre

0

Vous souhaitez probablement coder l'image en tant que Base64 pour le transfert. En ce moment, votre code essaie de lire le système de fichiers du serveur. Voir le code comme suit:

Dans votre application qui fait la demande:

private void btnEncode_Click(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(txtInFile.Text)) 
    { 
    FileStream fs = new FileStream(txtInFile.Text, 
            FileMode.Open, 
            FileAccess.Read); 
    byte[] filebytes = new byte[fs.Length]; 
    fs.Read(filebytes, 0, Convert.ToInt32(fs.Length)); 
    string encodedData = 
     Convert.ToBase64String(filebytes,     
           Base64FormattingOptions.InsertLineBreaks); 
    txtEncoded.Text = encodedData; 
    } 
} 

Du côté de la réception:

private void btnDecode_Click(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(txtOutFile.Text)) 
    { 
    byte[] filebytes = Convert.FromBase64String(txtEncoded.Text); 
    FileStream fs = new FileStream(txtOutFile.Text, 
            FileMode.CreateNew, 
            FileAccess.Write, 
            FileShare.None); 
    fs.Write(filebytes, 0, filebytes.Length); 
    fs.Close(); 
    } 
} 
+0

Merci beaucoup, mais où dois-je mettre mon image dans la première méthode? – Mohammadov

Questions connexes