2015-07-06 8 views
7

मुझे समस्या है कि मेरे पास पोस्टग्रेस्क्ल में एक फ़ंक्शन है जो दो पूर्णांक की गणना करता है और परिणाम को C# (npgsql) conosle पर वापस कर देना चाहिए और मुझे नहीं पता कि मेरी गलती कहां है, क्योंकि डीबगर नहीं कहता है मेरे लिए कुछ भी जो सहायक है।सी # में postgresql फ़ंक्शन के परिणाम को वापस कैसे करें? कंसोल आउटपुट खाली

तो सी # और फ़ंक्शन के सभी कोडों में से पहला।

   ... 
      cmd.Parameters["x"].Value = 20; 
      cmd.Parameters["y"].Value = 22; 
      connection.Open(); 

      if (connection.State == System.Data.ConnectionState.Open) { 
       //Console.WriteLine(cmd.Parameters["x"].Value); 
       command.ExecuteNonQuery(); 
       Console.WriteLine(cmd.Parameters["sum"].Value); 

      } 

और अब डीबी के कोड:

CREATE OR REPLACE FUNCTION t2(
    IN x integer, 
    IN y integer, 
    OUT sum integer) 
    RETURNS integer AS 
$BODY$BEGIN 
    sum := x + y; 
    INSERT INTO t2 (x, y, sum) values (x, y, sum); 
END 

तो जब मैं इसे चलाने का प्रयास,

Console.WriteLine(cmd.Parameters["sum"].Value); 

खाली हो जाएगा और [ "योग"] मूल्य है। शून्य। मैं क्या गलत कर रहा हूं? क्या मैं सही हूं, जब मैं कहता हूं कि "योग" एक आउट वैरिएबल है, तो मुझे वापसी की आवश्यकता नहीं है?

कृपया मदद करें।

सोल्व, सभी को धन्यवाद! उपयोग ExecuteScalar() ExecuteNonQuery के बजाय()

+1

आप वास्तव में आदेश को क्रियान्वित करने कर रहे हैं? मैं नहीं देख सकता कि आपके कोड में ... – mlinth

+0

कमांड के साथ क्या आप फ़ंक्शन का मतलब रखते हैं? हाँ मैं करता हूं, लेकिन मुझे लगता है कि यह समस्या नहीं है? 'डीबीकॉमांड कमांड = कनेक्शन। क्रिएट कमांड(); कमांड। कमांडटेक्स्ट = "टी 2"; कमांड। कमांड टाइप = कमांड टाइप। स्टोर्डप्रोसेसर; ' –

+0

अब पूर्ण कोड संपादित किया गया;) –

उत्तर

5

command.ExecuteNonQuery(); 

के बजाय

आप बुलाना चाहिए

Object res = command.ExecuteScalar(); 
Console.WriteLine(res); 
+0

हाय पैट्रिक, मेरे लिए काम नहीं करता है। 'Console.WriteLine (कमांड। पैरामीटर [" योग "]। मान);' खाली रहता है। –

+1

'ExecuteScalar()' फ़ंक्शन कॉल का परिणाम देता है। आपको यहां पैरामीटर को नहीं देखना चाहिए, लेकिन कॉल के परिणामस्वरूप। – Patrick

+0

मुझे इस बारे में पूरी तरह से यकीन नहीं है, लेकिन Npgsql PG 'OUT' पैरामीटर के उपयोग का समर्थन नहीं कर सकता है। पीजी में, घोषित 'आउट' पैरामीटर 'रिटर्न' क्लॉज की एक उल्लेखनीय भिन्नता है। – Patrick

1

आप उदाहरण के लिए, command.ExecuteNonQuery() के लिए, इस कोड को चलाने का प्रयास किया था: @Patrick मुझे सही जवाब दिया? क्योंकि आप वास्तव में क्वेरी निष्पादित किए बिना एक मूल्य पढ़ रहे हैं।

connection.Open(); 
command.ExecuteNonQuery(); 
int result = (int) cmd.Parameters["sum"].Value; 
Console.WriteLine(result); 
+0

हाय एलेक्स, क्षमा करें मैंने अभी गलत कोड लिया है, क्योंकि मैंने ExecuteNonQuery() की कोशिश की और कोशिश की और अक्षम कर दिया; मैंने लिया। जब मैंने आपके कोड की कोशिश की, तो मुझे 'int परिणाम = (int) कमांड के साथ एक NullReferenceException मिलता है। पैरामीटर ["योग"]। मान; ' –

+0

धन्यवाद एलेक्स। पैट्रिक ने इसे हल किया, यह ExecuteNonQuery के बजाय ExecuteScalar था। वैसे भी, धन्यवाद। ;) –

+0

मैंने इसके बारे में सोचा, लेकिन ExecuteScallar कोड हटा दिया क्योंकि यह हमेशा आउटपुट पैरामीटर के साथ काम नहीं करता :) यह अच्छा है कि आपका डेटा प्रदाता इस सुविधा का समर्थन करता है। लेकिन इस पर बहुत भरोसा न करें –

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