2012-06-30 8 views
6

मेरे पास एक wpf कर्मचारी निर्माण विंडो है जिसमें मैं पहली जानकारी जैसे अंतिम नाम, अंतिम नाम इत्यादि बना सकता हूं, यह मेरी आरईएसटी वेब सेवा में कर्मचारियों को बनाता है। एक उदाहरण:webservice के लिए एक्सेल दस्तावेज़ सामग्री

क्लाइंट साइड:

private void CreateStaffMember_Click(object sender, RoutedEventArgs e) 
    { 
     string uri = "http://localhost:8001/Service/Staff"; 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<Staff>"); 
     sb.AppendLine("<FirstName>" + this.textBox1.Text + "</FirstName>"); 
     sb.AppendLine("<LastName>" + this.textBox2.Text + "</LastName>"); 
     sb.AppendLine("<Password>" + this.passwordBox1.Password + "</Password>"); 
     sb.AppendLine("</Staff>"); 
     string NewStudent = sb.ToString(); 
     byte[] arr = Encoding.UTF8.GetBytes(NewStudent); 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     req.Method = "POST"; 
     req.ContentType = "application/xml"; 
     req.ContentLength = arr.Length; 
     Stream reqStrm = req.GetRequestStream(); 
     reqStrm.Write(arr, 0, arr.Length); 
     reqStrm.Close(); 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     MessageBox.Show("Staff Creation: Status " + resp.StatusDescription); 
     reqStrm.Close(); 
     resp.Close(); 
    } 

वेब सेवा पक्ष:

#region POST 

    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/Staff")] 
    void AddStaff(Staff staff); 

    #endregion 

    public void AddStaff(Staff staff) 
    { 
     staff.StaffID = (++eCount).ToString(); 
     staff.Salt = GenerateSalt(); 
     byte[] passwordHash = Hash(staff.Password, staff.Salt); 
     staff.Password = Convert.ToBase64String(passwordHash); 
     staffmembers.Add(staff); 
    } 

उस ओर सभी ठीक है, लेकिन मैं देख करने के लिए "आयात" स्टाफ Excel स्प्रेडशीट से विवरण, नहीं सुनिश्चित करें कि आयात सही शब्द है लेकिन मैं ऐसे एन स्प्रेडशीट में निहित पहला नाम और अंतिम नाम लेना चाहता हूं और उन्हें क्लाइंट साइड wpf एप्लिकेशन से वेब सेवा में जोड़ना चाहता हूं।

मैं इसके बारे में कैसे जाऊं? मैं अपने खुले फ़ाइल संवाद है:

private void Import_Click(object sender, RoutedEventArgs e) 
    { 
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 

     // Show open file dialog box 
     Nullable<bool> result = dlg.ShowDialog(); 

     // Process open file dialog box results 
     if (result == true) 
     { 
      // Open document 
      string filename = dlg.FileName; 
     } 
    } 

तो मैं अपने एक्सेल फैल शीट तो कैसे मैं आंतरिक सामग्री ले जा रहा है और यह वेब सेवा से भेजने के बारे में जाना होगा खोलने? वास्तव में कोड पर फंस गया है या इसके बारे में कैसे जाना है:/

बस मैन्युअल रूप से नाम टाइप करने के बजाय कर्मचारियों के सदस्यों को जोड़ने का एक स्वचालित तरीका ढूंढ रहे हैं, लेकिन कर्मचारियों के एक्सेल दस्तावेज़ के रूप में देखकर कुछ भी नाम दिया जा सकता है, जिसे मैं खुली फ़ाइल चाहता था संवाद बॉक्स। अंदर की संरचना हमेशा पहले नाम के समान नाम होगा।

+0

यह आपके प्रश्न का उत्तर नहीं देता है ... लेकिन क्या डीबी में डेटा को स्टोर करना ज्यादा आसान नहीं होगा? – Pynner

उत्तर

4

सबसे पहले, यहाँ अपने परीक्षण Excel फ़ाइल है कि स्टाफ आप आयात करना चाहते होता है: enter image description here

(कॉलम 'ए' यदि प्रथम नाम, स्तंभ 'बी' अंतिम नाम और स्तंभ है 'सी' है पासवर्ड ...)

ठीक है, तो यह है कि अपने कोड को अपने वेब सेवा काम करता है बुला संभालने, यहाँ Import_Click विधि के अपने संस्करण (और एक सामान्य विधि नए कर्मचारियों को बचाने के लिए) है:

private void Import_Click(object sender, RoutedEventArgs e) 
    { 
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 

     // Show open file dialog box 
     Nullable<bool> result = dlg.ShowDialog(); 

     // Process open file dialog box results 
     if (result == true) 
     { 
      // Open document 
      string filename = dlg.FileName; 

      Microsoft.Office.Interop.Excel.Application vExcelObj = new Microsoft.Office.Interop.Excel.Application(); 
      try 
      { 
       Workbook theWorkbook = vExcelObj.Workbooks.Open(filename, Type.Missing, true); 

       Worksheet sheet = theWorkbook.Worksheets[1]; // This is assuming that the list of staff is in the first worksheet 

       string vFirstName = "temp"; 
       string vLastName = "temp"; 
       string vPassword = "temp"; 
       int vIndex = 1; 

       while (vFirstName != "") 
       { 
        // Change the letters of the appropriate columns here! 
        // In my example, 'A' is first name, 'B' is last name and 'C' is the password 
        vFirstName = sheet.get_Range("A" + vIndex.ToString()).Value.ToString(); 
        vLastName = sheet.get_Range("B" + vIndex.ToString()).Value.ToString(); 
        vPassword = sheet.get_Range("C" + vIndex.ToString()).Value.ToString(); 

        this.SaveNewStaff(vFirstName, vLastName, vPassword); 

        vIndex++; 

       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error processing excel file : " + ex.Message); 
      } 
      finally { 
       vExcelObj.Quit(); 
      } 
     } 
    } 

    private void SaveNewStaff(string firstName, string lastName, string password) { 
     string uri = "http://localhost:8001/Service/Staff"; 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<Staff>"); 
     sb.AppendLine("<FirstName>" + firstName + "</FirstName>"); 
     sb.AppendLine("<LastName>" + lastName + "</LastName>"); 
     sb.AppendLine("<Password>" + password + "</Password>"); 
     sb.AppendLine("</Staff>"); 
     string NewStudent = sb.ToString(); 
     byte[] arr = Encoding.UTF8.GetBytes(NewStudent); 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     req.Method = "POST"; 
     req.ContentType = "application/xml"; 
     req.ContentLength = arr.Length; 
     Stream reqStrm = req.GetRequestStream(); 
     reqStrm.Write(arr, 0, arr.Length); 
     reqStrm.Close(); 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     //MessageBox.Show("Staff Creation: Status " + resp.StatusDescription); 
     reqStrm.Close(); 
     resp.Close(); 
    } 

नोट: मैंने सी में संदेश बॉक्स को हटा दिया है वेब सेवा के लिए यह सुनिश्चित करने के लिए कि यदि सूची लंबी है, तो आप इससे नाराज नहीं हैं, लेकिन यदि आप प्रत्येक कर्मचारी निर्माण के लिए पुष्टि की आवश्यकता है तो आप "unREM" के लिए स्वतंत्र हैं। सिखाए जाने की एक ही पंक्ति में, यह मान्य नहीं है कि सृजन सफलतापूर्वक हुआ है। सभ्य सत्यापन प्रक्रिया बनाने के लिए मुझे और विवरण की आवश्यकता होगी। भी बहुत महत्वपूर्ण है, यह सत्यापित नहीं करता है कि आपके द्वारा सहेजे जा रहे कर्मचारियों को सूची में पहले से मौजूद है या नहीं। यदि आप इस आयात प्रक्रिया को कई बार फिर से चलाते हैं, तो यह (और शायद होगा) डुप्लिकेट प्रविष्टियां बना सकता है।

चीयर्स

+1

वाह वास्तव में वास्तव में अच्छा है! आपने जो कुछ भी पूछा और समझने के साथ आप समझ गए! +1 लोग! –

+1

एलओएल मेरी खुशी। इसके अलावा, मुझे एहसास हुआ है कि एक छोटी स्मृति (या संसाधन प्रबंधन) मुद्दा है। कोई बड़ा सौदा नहीं है, लेकिन यदि आप इस प्रक्रिया को कई बार निष्पादित करना चाहते हैं, तो हो सकता है कि आप शेष "EXCEL.EXE" प्रक्रियाओं को छोड़ दें जो खुले रहें। मैंने अभी देखा है। – JFTxJ

+2

इसके अलावा, ध्यान दें कि मेरा कोड, जैसा लिखा है, एक्सेल फ़ाइल में पहली पंक्ति पर रुक जाएगा जिसमें "पहले नाम" कॉलम में कोई टेक्स्ट नहीं है। – JFTxJ

संबंधित मुद्दे