2014-01-10 4 views
0

all.SqlDataAdapter.DataTable의 행을 채우지 않습니다.

여기 내 코드입니다.

private void FillData(DataTable data, FilterModel filter){ 
    var cmdStr = MySqlCmdGenerator.Generate(filter); 
    using (var cmd = new SqlCommand(cmdStr, connection_)) 
    using (var da = new SqlDataAdapter(cmd)){ 
    da.Fill(data); 
    } 
} 

public DataTable GetData(IEnumerable<FilterModel> filters){ 
    var data = new DataTable("mydata"); 
    foreach (var filter in filters){ 
    FillData(data); 
    } 
    return data; 
} 

은 그냥 SqlDataAdapterFill에 데이터 테이블 filters에 따라 사용하는 매우 간단한 코드입니다.

가끔 GetData 메서드가 비어있는 데이터 테이블을 반환하는 것이 문제입니다.

먼저 SQL Server Management Studio에서 생성 된 쿼리를 실행하고 정확한 결과 (약 100,000 개의 레코드가 있음)를 반환합니다. 그럼 난 서버에 무슨 일이 있었는지 프로필 및 얻기 위해 SQL Server 프로파일 러를 사용한 몇 가지 오류 :

Sort Warnings 
RPC:Completed (TextData: Query with a given filter) 
Hash Warning 
Sort Warnings 
RPC:Completed (TextData: Query with a given filter) 
User Error Message (TextData: The statement has been terminated.) 
Attention 
Audit Logout 
RPC:Completed (TextData: sp_reset_connection) 

(이 순서대로 발생)

구글에서 오류 후

하지만 정확히 내가 무엇을 알아낼 수 서버 및 응용 프로그램에서 발생합니다.

모든 조언을 주시면 감사하겠습니다.

감사합니다.

답변

0

.NET 응용 프로그램의 결과와 SQL Server Management Studio의 결과의 차이점은 SQL Server 연결에 대한 ANSI 설정 구성의 차이 때문일 수 있습니다.

여기에는 명백한 오류 원인을 제거한 것으로 가정합니다. 두 환경에서 서로 다른 데이터베이스에 실수로 연결되어 있습니다.

SQL Server Management Studio에서 도구/옵션/쿼리 실행/SQL Server/ANSI에 사용되는 설정을 볼 수 있습니다. 난 당신이 .NET에서 사용하는 구성을 재현하려고 시도 Management Studio에서 하나 하나 이러한 OFF 전환 해보십시오 제안

SET ANSI_NULL_DFLT_ON ON 
SET ANSI_PADDING ON 
SET ANSI_NULLS ON 

:에 내 설치 그들은 기본. 당신은 무슨 일이 일어나고 있는지 이해하면, 당신이 중 하나를 수행 할 수 있습니다 : 그것은 이러한 설정에 의존하지 않도록 쿼리를 수정하여 .NET 쿼리

    • 추가 SET 문을 (ISNULL을 추가해야 할 수 있습니다 또는 NULL에 대한 명시 적 테스트).

  • 관련 문제