2017-09-18 2 views
0

DataTable에서 복사 한 후 각 열의 합계를 표시하는 SQL 테이블에 바닥 글 행을 추가하려고합니다. 여기에 표시된 값과 반대로 -1 값을 계속 유지합니다. 계산 된 합계로 일부 열을 나눔으로써 백분율을 얻으십시오. 제 코드는 다음과 같습니다.SQL 테이블의 열 합계를 구하는 방법은 무엇입니까?

미리 감사드립니다.

 using (SqlConnection dbConnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\evxaf4\Documents\Data.mdf;Integrated Security=True;Connect Timeout=30")) 
     { 
      dbConnection.Open(); 

      // create table if not exists 
      string createTableQuery = @"Create Table [DesignQuantitiesTable] 
        (ElementType varchar(200) , GrossVol real, NetVol real, GrossArea real, NetArea real, percgrosvol real, percnetvol real)"; 
      SqlCommand command = new SqlCommand(createTableQuery, dbConnection); 
      command.ExecuteNonQuery(); 


      // Copy the DataTable to SQL Server Table using SqlBulkCopy 

      using (SqlBulkCopy s = new SqlBulkCopy(dbConnection)) 
      { 
       s.DestinationTableName = "dbo.DesignQuantitiesTable"; 
       //foreach (var column in m_elementInformation.Columns) 
       // s.ColumnMappings.Add(column.ToString(), column.ToString()); 
       s.WriteToServer(m_elementInformation); 
      } 

      SqlCommand sumgvol = new SqlCommand("SELECT SUM(GrossVol) FROM DesignQuantitiesTable", dbConnection); 
      double sumgrosvol = sumgvol.ExecuteNonQuery(); 

      SqlCommand sumnvol = new SqlCommand("SELECT SUM(NetVol) FROM DesignQuantitiesTable", dbConnection); 
      double sumnetvol = sumnvol.ExecuteNonQuery(); 


      SqlCommand sumgarea = new SqlCommand("SELECT SUM(GrossArea) FROM DesignQuantitiesTable", dbConnection); 
      double sumgrosarea = sumgarea.ExecuteNonQuery(); 

      SqlCommand sumnarea = new SqlCommand("SELECT SUM(NetArea) FROM DesignQuantitiesTable", dbConnection); 
      double sumnetarea = sumnarea.ExecuteNonQuery(); 


      SqlCommand sumrow = new SqlCommand("Insert into DesignQuantitiesTable (ElementType, GrossVol, NetVol, GrossArea, NetArea) values ('"+ "Total" +"',"+ sumgrosvol.ToString() +","+ sumnetvol.ToString()+","+ sumgrosarea.ToString() +","+ sumnetarea.ToString() +")", dbConnection); 
      sumrow.ExecuteNonQuery(); 

      SqlCommand percentgvol = new SqlCommand("UPDATE DesignQuantitiesTable SET percgrosvol=(" + "GrossVol/sumgrosvol" + ")" , dbConnection); 
      percentgvol.ExecuteNonQuery(); 

      SqlCommand percentnvol = new SqlCommand("UPDATE DesignQuantitiesTable SET percnetvol=(" + "NetVol/sumgrosvol" + ")", dbConnection); 
      percentnvol.ExecuteNonQuery(); 


      dbConnection.Close(); 

     } 
+0

? 대량 복사 후에 테이블에 데이터가있는 경우 DB에서 직접 확인 했습니까? –

+0

대량 복사로 삽입 된 데이터가 실제로 테이블에 선택되어 다시 유효성을 검사 할 수 있습니까? 코드없이 select sum (...) sql을 데이터베이스에 대해 직접 실행하는 이유는 무엇입니까? –

+0

예, 내 DB를 검사하여 테이블에있는 모든 데이터를 가져 왔지만 올바른 합계 값을 얻지 못했습니다 (첨부 된 사진 확인). – zizobiko25

답변

0

당신은 ExecuteNonQuery 메서드를 사용하여 쿼리하는 컬럼의 합을받지 않습니다는 - 예를 들어 업데이트 & 삽입 -이 아닌 쿼리 명령에 의해 영향을 열 수를 반환합니다. 쿼리가 모든 열에 영향을 미치지 않으므로 -1이 반환 될 수 있습니다. (ExecuteNonQuery returns -1 참조).

하나의 값을 되돌리려면 ExecuteScalarQuery (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx)를 사용해야합니다. 그러면 변환해야하는 객체 (여기에서 작동 함)가 올바른 결과 유형으로 반환됩니다.

이 시도 :

SqlCommand sumnvol = new SqlCommand("SELECT SUM(NetVol) FROM DesignQuantitiesTable", dbConnection); 
double sumnetvol = (double)sumnvol.ExecuteScalarQuery(); 

-1 얻을
관련 문제