2009-06-25 11 views
5

यदि संग्रहीत प्रक्रिया में, मैं केवल एक कथन निष्पादित करता हूं, select count(*) from sometable, फिर क्लाइंट साइड से (मैं संग्रहीत प्रक्रिया का आह्वान करने के लिए सी # ADO.Net SqlCommand का उपयोग कर रहा हूं) मैं count(*) मान कैसे प्राप्त कर सकता हूं? मैं SQL सर्वर 2008 का उपयोग कर रहा हूं।संग्रहीत प्रक्रिया (ADO.NET) से स्केलर मान कैसे प्राप्त करें

मैं उलझन में हूं क्योंकि count(*) संग्रहीत प्रक्रिया के वापसी मान पैरामीटर के रूप में उपयोग नहीं किया जाता है। पहले से

धन्यवाद, जॉर्ज

उत्तर

6

या तो आप ExecuteScalar का उपयोग के रूप में एंड्रयू सुझाव दिया - या आप अपने कोड थोड़ा बदलना होगा:

CREATE PROCEDURE dbo.CountRowsInTable(@RowCount INT OUTPUT) 
AS BEGIN 
    SELECT 
    @RowCount = COUNT(*) 
    FROM 
    SomeTable 
END 

और फिर इस ADO.NET कॉल का उपयोग मान प्राप्त करने के लिए:

using(SqlCommand cmdGetCount = new SqlCommand("dbo.CountRowsInTable", sqlConnection)) 
{ 
    cmdGetCount.CommandType = CommandType.StoredProcedure; 

    cmdGetCount.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output; 

    sqlConnection.Open(); 

    cmdGetCount.ExecuteNonQuery(); 

    int rowCount = Convert.ToInt32(cmdGetCount.Parameters["@RowCount"].Value); 

    sqlConnection.Close(); 
} 

मार्क

पीएस: लेकिन इस ठोस उदाहरण में, मुझे लगता है कि ExecuteScalar निष्पादित करने के साथ वैकल्पिक विकल्प समझने में आसान और आसान है। यह विधि ठीक काम कर सकती है, अगर आपको एक से अधिक मान वापस करने की आवश्यकता है (उदा। कई तालिकाओं या इस तरह की गणना)।

+0

धन्यवाद @ मार्स, मैंने आपके समाधान कार्यों का परीक्षण किया है! ठंडा! – George2

6

जब आप क्वेरी कॉल ExecuteScalar पर अमल - इस परिणाम को वापस आ जाएगी।

क्वेरी निष्पादित करता है, और क्वेरी द्वारा लौटाए गए परिणाम सेट में पहली पंक्ति का पहला स्तंभ देता है। अतिरिक्त कॉलम या पंक्तियों को नजरअंदाज कर दिया जाता है।

चूंकि आप केवल एक मान लौट रहे हैं, यह केवल आपके count अभिव्यक्ति से मूल्य लौटाएगा। आपको इस विधि का परिणाम int पर डालना होगा।

+1

इस मामले में, आप क्या करने की जरूरत: तुम्हारा क्या मतलब है उलझन में है, -: चयन YOURVALUE - और YOURVALUE – Zanoni

+0

वापस नहीं "YOURVALUE का चयन करें - और नहीं लौटा दें YOURVALUE तुम क्या करने की जरूरत है"? क्या आप कृपया और बता सकते हैं? – George2

+0

@Andrew, मुझे आपका जवाब पसंद है, लेकिन मार्क के जवाब से पढ़ने के बाद, मुझे लगता है कि अधिक सुरुचिपूर्ण तरीके से स्टोर प्रक्रिया के वापसी मूल्य का उपयोग करना चाहिए, कोई टिप्पणी? – George2

1

marc_s उत्तर पूर्णांक के लिए ठीक काम किया। लेकिन वर्चर के लिए लंबाई निर्दिष्ट किया जाना चाहिए।

cmdGetCount.Parameters.Add("@RowCount", SqlDbType.varchar,30).Direction = ParameterDirection.Output;