Bonjour,

je travail sur un projet silverlight et je veux faire une interface où l'utilisateur peut télécharger des fichiers de son ordinateur et les enregistrer dans la base de donnée.
j'ai essayer de faire une procédure dans sql et l'appeler mais ça n'a pas marché puisque silverlight ne supporte pas la référence system.data.sqlclient
pour cela j'ai utilisé un ihttphandler qui enregistre le fichier téléchargé dans le serveur, mais je ne sais pas comment récupérer ce fichier à partir du serveur et l'enregistrer dans la base de donnée après avoir cliquer sur OK.
s'il vous plaît j'ai besoin de votre aide.
voici mon code .cs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
public partial class Piecejointe : ChildWindow
    {
        public Piecejointe()
        {
            InitializeComponent();
 
        }
 
        public TacheDomain[] context1;
        TacheDomain context = new TacheDomain();
 
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
 
                if (textBox1.Text != "")
                {
 
                    context.Load(context.GetfilesQuery());
 
                    file newfile = new file
                    {
                        filname = textBox1.Text,
 
                        taskid = 1,
 
                    };
                    context.files.Add(newfile); // pour ajouter
                    context.SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
             this.DialogResult = true;
        }
 
 
        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
 
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Multiselect = false;
            dlg.Filter = "All files (*.*)|*.*|PNG Images (*.png)|*.png";
 
            bool? retval = dlg.ShowDialog();
 
            if (retval != null && retval == true)
            {
                UploadFile(dlg.File.Name, dlg.File.OpenRead());
                textBox1.Text = dlg.File.Name;
 
            }
            else
            {
                textBox1.Text = "No file selected...";
            }
 
        }
        private void UploadFile(string fileName, Stream data)
        {
            UriBuilder ub = new UriBuilder("http://localhost:3840/fichier.ashx");
            ub.Query = string.Format("filename={0}", fileName);
 
            WebClient c = new WebClient();
            c.OpenWriteCompleted += (sender, e) =>
            {
                PushData(data, e.Result);
                e.Result.Close();
                data.Close();
            };
            c.OpenWriteAsync(ub.Uri);
        }
 
        private void PushData(Stream input, Stream output)
        {
            byte[] buffer = new byte[4096];
            int bytesRead;
 
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
            {
                output.Write(buffer, 0, bytesRead);
            }
        }
    }
voici mon code .ashx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class fichier : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            string filename = context.Request.QueryString["filename"].ToString();
 
            using (FileStream fs = File.Create(context.Server.MapPath("~/App_Data/" + filename)))
            {
                SaveFile(context.Request.InputStream, fs);
            }
        }
 
        private void SaveFile(Stream stream, FileStream fs)
        {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
            {
                fs.Write(buffer, 0, bytesRead);
            }
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }