2011-03-23 16 views
6

का उपयोग कर रिटर्न वैल्यू मैं परिणाम सेट प्राप्त करने और SQL 2008 सर्वर पर संग्रहीत प्रो के मूल्य को वापस करने का प्रयास कर रहा हूं। जब मैं एसक्यूएल प्रबंधन स्टूडियो में proc चलाता हूं, तो मुझे परिणाम सेट और वापसी मूल्य मिलता है।SqlCommand

हालांकि, जब मैं सी # 4.0 में मान प्राप्त करने का प्रयास करता हूं, तो पैरामीटर का मान शून्य है। यहाँ मेरी सी # कोड है:।

using (ConnectionManager<SqlConnection> cn = ConnectionManager<SqlConnection>.GetManager(CultureInfo.CurrentCulture.Name)) 
{ 
    using (SqlCommand cm = cn.Connection.CreateCommand()) 
    { 
     cm.CommandText = "Name of proc here"; 
     cm.CommandType = CommandType.StoredProcedure; 

     cm.Parameters.AddWithValue("@ApplicationId", ApplicationId);           
     cm.Parameters.AddWithValue("@Index", Index); 

     if (PageSize > 0) 
      cm.Parameters.AddWithValue("@PageSize", PageSize); 

     cm.Parameters.Add("@ReturnValue", SqlDbType.Int); 
     cm.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue; 

     using (IDataReader dr = cm.ExecuteReader()) 
     { 
      SafeDataReader sdr = new SafeDataReader(dr); 
      while (sdr.Read()) 
      { 
       UserApplicationEntity uae = new UserApplicationEntity(); 
       uae.UserId = sdr.GetGuid("UserId"); 
       uae.ExternalId = sdr.GetString("ExternalId"); 
       Result.Value.Collection.Add(uae); 
      } 

      Result.Value.TotalResults = (int)cm.Parameters["@ReturnValue"].Value; 
     } 
    } 
} 

अंतिम पंक्ति है, जहां मैं Result.Value.TotalResults = (int) cm.Parameters [ "@ ReturnValue"] कॉल मूल्य; वह जगह है जहां मूल्य शून्य है। मैंने पाया है कि हर ट्यूटोरियल या पोस्ट, मैं सबकुछ सही ढंग से कर रहा हूं। इस बिंदु पर मुझे लगता है कि मैं बस कुछ छोटा याद कर रहा हूं और आंखों का एक और सेट चाहिए। मैंने अन्य सभी के सामने रिटर्न पैरामीटर सेट करने का भी प्रयास किया है क्योंकि एमएस साइट पर मिली एक पोस्ट में कहा गया था कि मुझे इसकी आवश्यकता है, लेकिन यह कहां है कि यह कहां है, यह शून्य हो जाता है।

उत्तर

7

वापसी मूल्य डेटाबेस से प्रतिक्रिया में अंतिम बार भेजा जाता है, इसलिए आपको वापसी मूल्य तक पहुंचने से पहले परिणाम सेट को पूरी तरह से पढ़ना होगा।

SafeDataReader कक्षा क्या करती है? क्या यह संभव है कि यह पूरे परिणाम सेट को पढ़ने से रोकता है?

डेटा रीडर के लिए using ब्लॉक के बाहर रिटर्न मान को पढ़ने वाले कोड को स्थानांतरित करने का प्रयास करें। इससे परिणाम सेट से परे प्रतिक्रिया को आगे बढ़ाने में मदद मिल सकती है ताकि वापसी मूल्य उपलब्ध हो।

+0

इसे पाठक को बंद करने के लिए इसे उपयोग करने वाले ब्लॉक के बाहर ले जाना पड़ा। कभी सोचा नहीं था कि मामला था। धन्यवाद! – phreak3eb