2015-01-12 3 views
1

내가 이런 코드가 froms :잘못된 시도는 응용 프로그램

public DataTable GetScriptDetails() 
{ 
    DataTable dtScriptDetails = new DataTable(); 

    SqlConnection con = new SqlConnection("Data Source=sample;Initial Catalog=ScriptManagement;User ID=sa;Password=abcde"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select ScriptName,UploadDate from ScriptDetails", con); 

    using (SqlDataReader dataReader = cmd.ExecuteReader()) 
    { 
     while (dataReader.Read()) 
     { 
      dtScriptDetails.Load(dataReader); 
     } 
     dataReader.Close(); 
    } 
    con.Close(); 
    return dtScriptDetails; 
} 

을하지만 난이 오류가있어 다음과 같은 경우 읽기 전화

잘못된 시도 리더가 닫혔다.

나는 이것을 많이 찾았지만 이것을 해결할 수 없다. 도움이 될 것입니다.

+1

연결 문자열을 확인 했습니까? 괜찮 니? 나는'SqlConnection'에 제공 한 연결 문자열을 사용하여 데이터베이스에 연결할 수 있습니까? – Christos

+0

예. 그것은 잘 DB에서 일부 값을 삽입하는 다른 방법에 대한 일하고 있어요. –

답변

1

DataTable.Load 메서드는 판독기에서 모든 데이터를로드합니다. 독자의 행을 반복 할 필요가 없습니다. 따라서 코드에서 루프를 제거하고 다음과 같이 할 수 있습니다.

using (SqlDataReader dataReader = cmd.ExecuteReader()) 
    { 
      dtScriptDetails.Load(dataReader); 
    } 
+0

감사합니다. 그게 내 문제를 해결했지만 지금은 데이터를 받고있는 동안 오류가 발생했습니다 : http : // localhost : 62476/DeploymentMangerService.svc에 대한 HTTP 응답을받는 동안 오류가 발생했습니다. 이것은 HTTP 프로토콜을 사용하지 않는 서비스 엔드 포인트 바인딩 때문일 수 있습니다. 이것은 HTTP 요청 컨텍스트가 서버에 의해 중단 되었기 때문일 수도 있습니다 (서비스 종료로 인한 것일 수도 있음). 자세한 내용은 서버 로그를 참조하십시오. –

+0

내 코드는 다음과 같습니다. DeploymentMangerServiceClient objDeploymentMangerClient = new DeploymentMangerServiceClient(); DataTable dtScriptdetails = objDeploymentMangerClient.GetScriptDetails(); –

1

나는이 문제가 해결되는지 모르겠지만 HasRows + 경우 대신 루프 + Read의의 사용

SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.Fill(dtScriptDetails); 
그러나

using (SqlDataReader dataReader = cmd.ExecuteReader()) 
{ 
    if (dataReader.HasRows) 
    { 
     dtScriptDetails.Load(dataReader); 
    } // no need to close it if you use using 
} 

, 나는 테이블을 채우기 위해 SqlDataAdapter을 사용

+0

내 경우에도 마찬가지입니다. 고마워. @Tim. –

관련 문제