2009-07-06 3 views
1

어쨌든 EXEC를 통해 저장 프로 시저를 실행할 수 있습니까 (C#에서는 CommandType.StoredProcedure을 지정하지 않음) 결과를 얻을 수 있습니까? 쿼리를 통해 저장된 프로 시저 호출 및 출력 매개 변수없이 C#에서 반환 값 얻기

나는 쿼리를

DECLARE @R int 
EXEC @R = proc p1, p2 

을 실행하기 위해 다음 @R하지만 성공하지를 잡기 위해 노력했다.

필자가 원하지 않는 것은 매개 변수를 추가하고 ParameterDirection.ReturnValue을 사용하여 결과를 얻는 일반적인 방법입니다.

나는 모든 정보를 감사하겠습니다. Ty.

편집

어떤 사람들은 이유를 물었다.

저장 프로 시저를 실행하고 반환하는 모든 종류의 결과를 얻는 콘솔 프로그램을 만들어야합니다. 응용 프로그램은 데이터베이스 conn 및 sp의 설명과 함께 .config 파일을 허용합니다.

이제는 일반적인 방법으로 각 매개 변수를 설정해야합니다. 그렇지 않으면 일반적인 쿼리 형식으로 호출을 지정하면 직접 구문 분석해야합니다. 사용자는 매개 변수 세부 사항 등을 알아야합니다 ...

그 이유는 내가 exec 접근 방식을 선택했습니다. 사용자는 하나의 키 아래에 config 파일 저장 프로 시저 및 매개 변수를 지정할 수 있습니다.

<add key="Procedure" value="dbo.TEST 10,20"/> 

및 그것에 대해별로 생각하지 않아도됩니다. 그러한 프로그램에서 일하는 사람들은 프로그래밍 작업을 이해하지 못한다. 즉, 텍스트를 인자로 써야한다는 것을 안다. (암시 적 변환은 미스터리이다.)

프로그램은 일반적으로 inital 구성을 제외한 모든 사용자 매개 변수를 허용하지 않으므로 SQL 인젝션 등 존재하지 않으며, 사안 점검이 SP 수준으로 옮겨 질 수도 있습니다.

구현 년 OFC 사소한된다 : 그것은 외부 세계에 대한 지식이없는 일괄 적으로 선언 이후

const string runFormat = "exec ('declare @r varchar (1024);EXEC @r={0}{1};select @r')"; 

    public bool Run(string parameters, out string result) { 
     SqlConnection con = new SqlConnection(connectionString); 

     SqlCommand cmnd = new SqlCommand(String.Empty, con); 
     cmnd.CommandText = String.Format(runFormat, storedProcedure, parameters ?? String.Empty); 

     try { 
      con.Open(); 
      result = (string)cmnd.ExecuteScalar(); 
     } 
     catch (Exception e) { 
      result = e.Message; 
      return false; 
     } 
     return true; 
    }  
+1

당신은하고 싶지 않은 것을 말했지만, 당신이하고 싶은 것이 아닙니다. 매개 변수를 사용하지 않음으로써 달성하고자하는 것은 무엇입니까? –

+0

위의 EDIT를 확인하십시오. – majkinetor

답변

3

이가 C#에서이 쿼리를 실행 해보십시오 :

간부를 ('@r의 INT 선언; EXEC의 @ r에 = 테스트 1,2; @r 선택')

+0

Ty mate, 정확히 내가 필요한 것. 나는 스칼라 실행으로 결과를 얻는다. – majkinetor

2

당신은 @R의 보류를 얻을 수 없습니다. BLToolkit는 (대략) 구출 :

[SqlQuery("declare @r int; exec @r = proc @p1, @p2; return @r")] 
public abstract object ExecProc(int @p1, int @p2); 
관련 문제