2010-12-07 4 views
0

무엇이 잘못 되었나요? 내 DataTable에서 LINQ를 사용하여 저장된 proc 전달하려고합니다. 아래는 제 코드입니다.ASP.NET에서 LINQ를 사용하여 proc를 호출하고 DataTable을 전달합니다.

 
var sqlCommand = new System.Data.SqlClient.SqlCommand { 
    CommandType = System.Data.CommandType.StoredProcedure, 
    CommandText = "UserIdList" 
}; 

var dataTable = new System.Data.DataTable("IdList"); 
dataTable.Columns.Add("AttributeIds", typeof(Int32)); 
dataTable.Rows.Add(26); 
dataTable.Rows.Add(40); 
dataTable.Rows.Add(41); 
dataTable.Rows.Add(45); 
dataTable.Rows.Add(78); 
dataTable.Rows.Add(33); 
dataTable.Rows.Add(36); 

//The parameter for the SP must be of SqlDbType.Structured 
var parameter = new System.Data.SqlClient.SqlParameter { 
    ParameterName = "@AttributeIds", 
    SqlDbType = System.Data.SqlDbType.Structured, 
    TypeName = "ecs.IDList", 
    Value = dataTable, 
}; 

sqlCommand.Parameters.Add(parameter); 

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 


+0

그리고 오류는 무엇입니까 ?? – InSane

+0

@InSane - 오류 메시지 : 쿼리 매개 변수의 형식이 'System.Data.SqlClient.SqlCommand'일 수 없습니다. – Mark

+0

'myDC.DC' 객체의 데이터 유형은 무엇입니까? – InSane

답변

1

이 문제를 귀하의 코드에서

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 

것 같다, 첫 번째 매개 변수와 두 번째 매개 변수로 사용자 ID로 SqlCommand 개체를 전달하고 있습니다.

데이터 컨텍스트 ExecuteQuery method has 2 overloads

ExecuteQuery<TResult>(String, Object[]) 
ExecuteQuery(Type, String, Object[]) 

당신은 과부하 1 사용할 것 - 즉 ExecuteQuery<TResult>(String, Object[])을하지만 경우에 당신은 반환 된 객체의 유형을 지정해야

예 : -

var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers WHERE City = {0}", "London"); 

참고 : db.ExecuteQuery 위의 예에서 <Customer>은 내가 다시 작성한 것입니다. 페링.

컴파일러가 2 개의 오버로드로 요청을 매핑하는 대신 어떤 값도 반환하지 않지만 3 개의 매개 변수를 사용하여 A query parameter cannot be of type 'System.Data.SqlClient.SqlCommand 오류가 발생하므로 이것이 오류의 원인 일 수 있다고 생각합니다.

관련 문제