2017-11-06 11 views
0

SMSS에서 아래의 저장 프로 시저를 실행하면 작동하고 멋진 결과를 반환합니다.저장 프로 시저가 작동하지만 C에서 잘못된 열을 제공합니다 #

SQL :

EXEC @return_value = [dbo].[xxxxxx_EnergiAllTags] 
    @SegmentResponseID = 'xxxxxxxxxx' 

하지만 내 C# 코드에서 저장 프로 시저를 실행하려고 할 때, 나는 오류 얻을 :

public DataSet GetQuery(string batchNr) 
{ 
     SqlConnection conn = new SqlConnection("xxxxxxxx"); 
     SqlCommand command = new SqlCommand("xxxxxx_EnergiAllTags", conn); 
     SqlDataAdapter da = new SqlDataAdapter(command); 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.Add(new SqlParameter("@SegmentResponseID", batchNr)); 

     DataSet ds1 = new DataSet(); 
     command.CommandTimeout = 60000; 

     try 
     { 
      da.Fill(ds1); 
      return ds1; 
     } 
     catch (Exception e) 
     { 
      string ex = e.Message; 
      throw; 
     } 
    } 
: 이것은 내 코드입니다

Invalid column name 'Value'

실마리가있는 사람이 문제의 원인을 파악하는 데 도움이 될 수 있습니까? 필수로

**** 업데이트 *****

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[xxxxxx_EnergiAllTags] 
    @SegmentResponseID AS VARCHAR(MAX) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    CREATE TABLE #temp (TagName NVARCHAR(MAX), 
         StartValue NVARCHAR(MAX), 
         EndValue NVARCHAR(MAX), 
         Usage NVARCHAR(MAX) 
         ) 

    INSERT INTO #temp 
     EXEC [dbo].[xxxxxx_EnergyTagForBatch] @BatchID = @SegmentResponseID, 
@TagName = 'T06C02D01E02FQ000.PV' 

    INSERT INTO #temp 
     EXEC [dbo].[xxxxxx_EnergyTagForBatch] @BatchID = @SegmentResponseID, 
@TagName = 'T06C02D01E02FQ001.PV' 

    SELECT * From #temp 
    DROP TABLE #temp 
END 
+0

'xxxxxx_EnergiAllTags'의 코드를 공유 할 수 있습니까? 그리고 어떤 출력물을 반환 할 것으로 기대하십니까? –

+0

우리는 저장 프로 시저의 코드도 볼 필요가 있다고 생각합니다. 'Value'라는 컬럼이 있습니까? 그렇다면 대괄호 ('[Value]')로 묶으십시오. –

+0

값은 t-sql의 키워드이며 해당 유형 이름에 대괄호 (예 : [값])를 사용하십시오. – SeM

답변

0

이 좋아 내가 문제를 파악했다.

2 SP는 #temp라는 임시 테이블을 가지고 있으며 각 인스턴스마다 지역화되어야한다고 생각하지만 혼합되지 않았으며 그 당시에는 오류가 발생했습니다.

해결 방법, 호출 할 수있는 저장 프로 시저 문자열에 같은 이름의 임시 테이블이 없는지 확인하십시오.