2012-01-13 2 views
1

어떻게 데이터 테이블을 사용하여 여러 번 업데이트 할 수 있습니까?C# DataTable 여러 줄 업데이트

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne) 
     { 
      try 
      { 
       using (var connectionWrapper = new Connexion()) 
       { 
        var connectedConnection = connectionWrapper.GetConnected(); 


        SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn); 
        DataSet ds = new DataSet(); 
        da.Fill(ds, "Emp"); 
        DataTable dt = ds.Tables["Emp"]; 
        CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne); 

        //Update all lines, it not save in Database 
        foreach (DataRow row in dt.Rows) 
        { 
         row["IS_IMPORT"] = true; 
        } 
       } 
      } 
      catch (Exception excThrown) 
      { 
       throw new Exception(excThrown.Message); 
      } 



     } 

문제는 다음과 같습니다 :

foreach (DataRow row in dt.Rows) 
         { 
          row["IS_IMPORT"] = true; 
         } 

그것을 데이터베이스에 저장하지

내가이 Update 1 row

내 코드를 발견했다. 사전에

감사를, Stev

+0

주의 :이 방법은 메모리를 많이 차지하므로주의해야합니다. 테이블에 1000 개 이상의 행 (임의의 숫자)이 있으면 메모리에 큰 영향을줍니다. 줄 단위로 읽을 수있는 SqlDataReader로 이동 한 다음 파일 스트림을 사용하여 csv 파일에 문자열 줄을 추가하십시오. –

답변

3

당신은 메모리 값을 업데이트하고 있습니다. DataTable 클래스 이 아니며 메모리 표현입니다. SQL 데이터 어댑터는 데이터 만 복사합니다.

변경 사항을 DB에 다시 써야합니다. 시도해보십시오.

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne) 
    { 
     try 
     { 
      using (var connectionWrapper = new Connexion()) 
      { 
       var connectedConnection = connectionWrapper.GetConnected(); 


       SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn); 

       da.UpdateCommand = connectedConnection.CreateCommand(); 
       da.UpdateCommand.XXXX = YYYY; // construct the SQL Command      

       DataSet ds = new DataSet(); 
       da.Fill(ds, "Emp"); 
       DataTable dt = ds.Tables["Emp"]; 
       CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne); 

       //Update all lines, it not save in Database 
       foreach (DataRow row in dt.Rows) 
       { 
        row["IS_IMPORT"] = true; 
       } 

       da.Update(dt); 
      } 
     } 
     catch (Exception excThrown) 
     { 
      throw new Exception(excThrown.Message); 
     } 
    } 

이렇게하면됩니다.

+0

응답 해 주셔서 감사합니다. 잘 작동합니다. "da.UpdateCommand.CommandText ="UPDATE ORDRE SET IS_IMPORT = 'true' "와'foreach (dt.Rows의 DataRow 행) { 행 ["IS_IMPORT "] = true; }' – user609511

+1

SQL 쿼리 업데이트 ** 모든 ** 데이터가 테이블에 있습니다. SqlDataAdapter Update 메서드에서 사용할 수있는 것보다 SQL 쿼리를 작성해야합니다. 당신이'row [ "IS_import"] = true;를 쓸 때 그것은 행을 업데이트 된 것으로 표시합니다. SqlDataAdapter.Update에 대한 호출은 테이블의 모든 업데이트 된 행을 취한 다음 해당 업데이트 명령을 실행합니다. 제안 :이 수업을 발견 한 것 같아서 비주얼 스튜디오 디자이너에게 모든 것을 만들어 줄 수있는 기회를주십시오. –

+0

설명 해 주셔서 감사합니다 ... – user609511

4

는 먼저 데이터베이스의 행을 갱신하기 위해 실행됩니다 UPDATE 문에 데이터 어댑터의 UpdateCommand 속성을 설정해야합니다.

그런 다음 DataTable에서 값을 업데이트 한 후에 DataAdapter.Update()에 전달해야합니다. 그러면 DataTable의 업데이트 된 행마다 UpdateCommand가 실행됩니다.

참고 :

MSDN - SqlDataAdapter.Update
MSDN - SqlDataAdapter.UpdateCommand