2012-01-31 3 views
1

'의'나는 다음과 같은 코드가 있습니다LINQ - 투 - SQL과 ExecuteCommand를 문

long[] conIds = GetIDs(); 
dc.ExecuteCommand("UPDATE Deliveries SET Invoiced = NULL WHERE ID IN {0}",conIds); 

나는 일에 그것을 기대하지만, ExecuteCommand를 문라는 예외를 throw를 그

검색어 매개 변수는 유형이 int64 [] 일 수 없습니다.

왜 그렇습니까?

답변

1

long 배열을 문자열이 필요한 자리 표시 자로 전달하고 있습니다. 쉼표 분리 문자가있는 연결 문자열로 배열을 변환해야합니다. 그런 다음 명령 텍스트로 전달하십시오.

GetIDs 메서드를 사용하는 다른 위치에 따라 해당 메서드에서 문자열 배열을 반환하도록하여 코드를 단순화 할 수 있습니다. 그런 다음 여기에서 String.Join을 쉽게 사용하여 해당 배열을 원하는 연결 텍스트로 변환 할 수 있습니다.

0

이 작업을 수행 할 수 없습니다. SQL 매개 변수는 단일 값이어야합니다.

배열을 쉼표로 구분 된 값 목록으로 변환하면됩니다.

예를 들어 here을 참조하십시오.

command.CommandText = command.CommandText.Replace(
    "@conIDs", 
    string.Join(conIDs.Select(b => b.ToString()), ",") 
); 

일반적으로 SQL을 직렬화하고이 종류의 일에 대해 테이블 ​​값 매개 변수를 사용하는 것이 좋습니다. 지침은 this question을 참조하십시오.

0

나는 이것에 문제가 있었고 Linq는 매개 변수에 대해 매우 특별하다는 것을 알았다. SQL 문을 문자열로 작성하고이 문자열을 .ExecuteCommand()에 전달하여 작동되도록해야했습니다. 오류가없고 결과가 없습니다. 혼란스러워.

그건 누구나 Linq가 SQL Server에 전달하는 것을 보는 좋은 방법을 본 사람이 있습니까?

SQL 프로파일 러를 사용했지만 다소 모호합니다.

+0

DataContext.Log 속성을 사용하면 쿼리를 기록 할 TextWriter를 지정할 수 있습니다. 예 : 'DataContext.Log = Console.Out'을 사용하여 콘솔에 출력 할 수 있습니다. –