2012-08-29 3 views
6

X ++에서 직접 SQL을 통해 저장 프로 시저를 호출하는 중 정수 반환 값을 얻는 방법을 알 수 없습니다. 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

'@status NOT IN (3,4,5)가 -1 - Quarantine, Received, Invoiced을 반환하면 if bad 상태가 통과되면 오류 코드를 다시 전달할 수 있습니다. -2는 이메일을 찾을 수 없거나 뭔가있을 것입니다. –

답변

5

executeUpdate은 업데이트 된 행 수를 반환합니다. 그렇지 않으면 아무것도 반환하지 않는 SQL 문의 경우 0입니다.

executeQuery은 ResultSet 클래스의 인스턴스를 반환하지만 저장 프로 시저를 호출하는 것은 select가 아니므로 계약을 위반하게됩니다.

당신이하려는 것은 지원되지 않습니다.

glue code으로 C#을 사용하거나 .NET CLR Interop을 직접 사용하는 C# 형식을 사용할 수 있습니다.

+0

아. 내가 SELECT (EXEC [...]) 또는 일부 다른 SQL 작업을 할 수 있는지 궁금해 일을 executeQuery 얻을. –

+0

시도해 볼 가치가 있습니다. –