2012-08-29 11 views
6

मैं एक्स ++ से सीधे एसक्यूएल के माध्यम से संग्रहीत प्रक्रिया को कॉल कर रहा हूं, और मैं यह नहीं समझ सकता कि इससे पूर्णांक वापसी मूल्य कैसे प्राप्त करें। 0 अच्छा है, -1 खराब है।किसी संग्रहीत प्रक्रिया में प्रत्यक्ष SQL कॉल के परिणाम कैसे प्राप्त करें?

// Login to SQL DB 
loginProperty = new LoginProperty(); 
loginProperty.setServer('localhost'); 
loginProperty.setDatabase('SQL_DB'); 
odbcConnection = new OdbcConnection(loginProperty); 
statement = odbcConnection.createStatement(); 


/* 
@in_customer_id    INT 
,@status      INT 
,@dlvmode      NVARCHAR(25) 
,@dlvmodedesc     NVARCHAR(50) 
,@tracking_id     NVARCHAR(50) 
,@note       NVARCHAR(MAX) 
,@modified      SMALLDATETIME = null 
,@override_email    NVARCHAR(200) = null 
*/ 

sqlStatement = strfmt(' EXEC pr_send_status_email ' + 
         ' %1,'  + // CustomerId 
         ' %2,'  + // Status 
         ' %3,'  + // DlvMode 
         ' %4,'  + // DlvMode description 
         ' %5,'  + // Tracking # 
         ' %6,'  + // Note 
         ' %7'    // DateTime 
         , 160308 
         , 2 
         , sqlSystem.sqlLiteral("FD1") 
         , sqlSystem.sqlLiteral("Fed Ex overnight") 
         , sqlSystem.sqlLiteral("1ZABCDEF") 
         , sqlSystem.sqlLiteral("Note Here") 
         , sqlSystem.sqlLiteral(DateTimeUtil::utcNow())); 



sqlStatementExecutePermission = new SqlStatementExecutePermission(sqlStatement); 
sqlStatementExecutePermission.assert(); 
//BP deviation documented 
resultSet = statement.executeQuery(sqlStatement); 
//info(strfmt("%1", statement.executeUpdate(sqlStatement))); // I Tried this too 
CodeAccessPermission::revertAssert(); 

if (resultSet.next()) // Errors here 
    info(strfmt("Return: %1", resultSet.getInt(1))); 
+0

क्या आप यह निर्धारित करने की कोशिश कर रहे हैं कि कोई रिकॉर्ड है या नहीं? –

+0

मैं कह रहा हूं कि अगर @ स्टैटस इन नहीं (3,4,5) रिटर्न -1 - क्वारंटाइन, प्राप्त, चालान 'तो यदि कोई खराब स्थिति बीत जाती है, तो मैं त्रुटि कोड वापस भेज सकता हूं। -2 ईमेल नहीं मिलेगा या कुछ नहीं होगा। –

उत्तर

5

executeUpdate एक अद्यतन पंक्ति गणना देता है; अन्यथा एसक्यूएल कथन के लिए 0 जो कुछ भी वापस नहीं करता है।

executeQuery परिणामसेट क्लास का एक उदाहरण देता है, लेकिन संग्रहीत प्रक्रिया को कॉल करना एक चयन नहीं है, इसलिए आप अनुबंध तोड़ते हैं।

जो आप करने का प्रयास कर रहे हैं वह समर्थित नहीं है।

आप सी # को glue code के रूप में उपयोग कर सकते हैं या सीधे .NET CLR Interop का उपयोग कर सी # प्रकारों का उपयोग कर सकते हैं।

+0

आह। मुझे आश्चर्य है कि क्या मैं निष्पादित करने के लिए executeQuery प्राप्त करने के लिए 'SELECT (EXEC [...])' या कुछ अन्य SQL कार्य कर सकता हूं। –

+0

यह एक कोशिश के लायक है। –

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

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