2012-09-27 18 views
8

मैं पिछले कुछ सालों से इस बात से जूझ रहा हूं और मुझे यकीन है कि मुझे कुछ छोटा याद आ रहा है, मेरे पास SQL ​​Server 2008 और C# कोड में संग्रहीत प्रक्रिया है जिसे मैं वापस करना चाहता हूं मेरी संग्रहीत प्रक्रिया के आउटपुट पैरामीटर।संग्रहीत प्रक्रिया आउटपुट पैरामीटर @Value

एसक्यूएल:

Alter Procedure dbo.GetAssessment 
    @UserID int, 
    @AssessmentName varchar(255), 
    @Score varchar(100) output, 
    @Completed varchar(10) output, 
    @DisplayName nvarchar(128) output, 
    @Result varchar(2500) output 
as 
begin 
     select @Score = A.Score, @Completed = A.Completed, @DisplayName = U.Displayname, @Result = A.Result 
     from Assessment A 
      inner join Users U 
      on U.UserId = A.UserID 
     where U.UserID = @UserId 
     and AssessmentName = @AssessmentName 

end 
GO 

सी #

String SScore, SName, SResult, SComp; 
      lblAsse.Text = Request.QueryString["AID"]; 

      InsertAssessment(lblAsse.Text, "No", 2, "N/A", "N/A"); 

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString)) 
      { 
       SqlParameter outScore = new SqlParameter("@Score", SqlDbType.VarChar,100){ Direction = ParameterDirection.Output }; 
       SqlParameter outComp = new SqlParameter("@Completed", SqlDbType.VarChar,10){ Direction = ParameterDirection.Output }; 
       SqlParameter outName = new SqlParameter("@DisplayName", SqlDbType.NVarChar, 128) { Direction = ParameterDirection.Output }; 
       SqlParameter outResult = new SqlParameter("@Result", SqlDbType.VarChar,2500){ Direction = ParameterDirection.Output };    

       conn.Open(); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = conn; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.CommandText = "GetAssessment"; 
       cmd.Parameters.AddWithValue("@AssessmentName", lblAsse.Text); 
       cmd.Parameters.AddWithValue("@UserId", 2); 
       cmd.Parameters.Add(outScore); 
       cmd.Parameters.Add(outComp); 
       cmd.Parameters.Add(outName); 
       cmd.Parameters.Add(outResult); 
       cmd.ExecuteScalar(); 

       SScore = outScore.ToString(); 
       SName = outName.ToString(); 
       SResult = outResult.ToString(); 
       SComp = outComp.ToString(); 

       conn.Close(); 

       lblAsse.Text = SScore;` 

आउटपुट:

@Score 

क्या संभवतः मेरे या मेरे कोड के साथ गलत हो सकता है। कृपया सहायता कीजिए!

उत्तर

12

आप बस अपनी उत्पादन मानकों से वास्तविक मूल्यों बाहर पढ़ने की जरूरत है:

SScore = outScore.Value; 

.ToString() मूल्य वापस नहीं करता है - यह बजाय पैरामीटर का नाम देता है ...

अधिक जानकारी के लिए

MSDN documentation on SqlParameter देखें।

+0

उत्तर के लिए धन्यवाद, मैंने कोशिश की है कि, स्पष्ट रूप से त्रुटि प्राप्त करें वस्तु को परिवर्तित नहीं कर सकता है। इसे स्ट्रिंग में कनवर्ट किया गया, लेकिन तब भी मैं कुछ भी प्रदर्शित नहीं करता, भले ही मैं हर बार डेटा डालता हूं। क्या आपको लगता है कि यह आउटपुट पैरामीटर प्राप्त करने का तरीका हो सकता है? क्या ऐसा करने के लिए इससे अच्छा तरीका है? –

0

बस इसे करने की आवश्यकता है। उत्पादन मानकों से पहले आप के रूप में

reader.Close(); 

डाटा पाठक को बंद करना होगा और फिर आप अधिक मदद के लिए के रूप में

SScore = outScore.Value.Tostring(); 

उत्पादन मानकों पाने से परामर्श इस http://msdn.microsoft.com/en-us/library/ms971497

+0

कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ें – Huangism

0

> यह अपने काम करने की कोशिश करो एकाधिक आउटपुट पैरामीटर के लिए ठीक है:

 using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["conStringEndicia"].ConnectionString)){ 

      using (var sqlCmd = new SqlCommand("endicia.credentialLookup", sqlConnection)) 
      { 

       sqlCmd.CommandType = System.Data.CommandType.StoredProcedure; 
       sqlCmd.Parameters.AddWithValue("@accountNumber", accountNumber); 
       SqlParameter outLogin = new SqlParameter("@login", SqlDbType.NVarChar, 100) { Direction = ParameterDirection.Output }; 
       sqlCmd.Parameters.Add(outLogin); 
       SqlParameter outPassword = new SqlParameter("@password", SqlDbType.NVarChar, 100) { Direction = ParameterDirection.Output }; 
       sqlCmd.Parameters.Add(outPassword); 
       sqlConnection.Open(); 
       sqlCmd.ExecuteNonQuery(); 
       string login, password; 
       login = outLogin.Value.ToString(); 
       password = outPassword.Value.ToString();       
      } 
     } 
संबंधित मुद्दे