2014-05-13 1 views
1

이름을 지정하지 않고 두 개의 열을 반환하는 저장 프로 시저가 있습니다. 하나는 ID (int)이고 다른 하나는 문자열입니다. 열 이름을 사용하여 결과를 반환 할 수 있도록 저장 프로 시저를 변경하는 것은 불가능합니다. 에 저장 프로 시저를 사용하여 .edmx 파일을 만들도록 Visual Studio에 허용하면 새 모델 클래스가 생성됩니다. Column1Column2이라는 두 가지 속성이 있습니다. 문제는 내가 그것을 실행할 때, 나는 다음과 같은 오류가 나타날 것입니다 :저장 프로 시저 결과 열없이 모델에

The data reader is incompatible with the specified 'Schema.addCliente_Result'. A member of the type, 'Column1', does not have a corresponding column in the data reader with the same name.

결과를 매핑 할 다른 방법이 있나요을에 어쩌면 A A dictionary<int,string> 또는 열 이름을 필요로하지 않는다 무엇?

답변

0

KeyValuePair을 사용해보세요. 키에 지정된 값을 저장합니다. 더 많은 쌍을 가지고 있고 더 쉽게 반복하려는 경우 KeyValuePair 목록을 만들 수 있습니다. 나는 이것이 당신의 경우에 도움이되는지 확신하지 못합니다, 도움이되지 않는다면 미안합니다.

KeyValuePair MSDN

0

아마 당신은 당신이이 모델에 매핑하지 않기 때문에 투사를 고려할 수 있습니다. 투영은 쿼리 결과가 쿼리 된 유형과 다른 유형으로 출력되는 경우입니다. 어느 쪽이든 저장 프로 시저의 결과를 사용하여 익명 형식 또는 자신의 클래스를 만들 수 있습니다. 나를 참조 할에 대한 코드가 없기 때문에 다음과 같이 내가 예를 가지고 : 저장하는 데 사용

클래스는 저장 프로 시저를 호출하는

public Class Result 
{ 
    public int myID {get; set;} 
    public string myString {get; set;} 
} 

코드 결과

string connectionString = ConfigurationManager.AppSettings["MyDatabase"]; 
var conn = new SqlConnection(connectionString); 
conn.Open(); 
string query = @"my_stored_procedure"; 
using (var sqlAdpt = new SqlDataAdapter(query, conn)) 
{ 
    sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure; 
    // Ex: Parameters if your sp takes one 
    var dataDate = new SqlParameter { ParameterName = "@DataDate", Value = DateTime.Now }; 
    sqlAdpt.SelectCommand.Parameters.Add(dataDate); 
    var results = new DataSet(); 
    sqlAdpt.Fill(results); 
    List<Result> resultList = results.Tables[0].AsEnumerable(). 
     Select(dataRow => new Result 
     { 
      myID = dataRow.Field<int>("ID"), 
      myString = dataRow.Field<string>("column_I_cant_change") 
     }).ToList(); 

}