2013-07-08 3 views
1

데이터를 SQLite에서 .csv으로 내보내는 중입니다.하지만 행에 문제가있어 결과가 항상 첫 번째 행에 표시되는 이유는 무엇입니까? 내가 뭐 놓친 거 없니??결과가 항상 첫 번째 행에 표시되는 이유는 무엇입니까?

결과 :

enter image description here

내 코드 :

private void DataExport() 
     { 
      SaveFileDialog saveFileDialog = new SaveFileDialog 
      { 
       Title = "Choose file to save to", 
       FileName = ".csv", 
       Filter = "CSV (*.csv)|*.csv", 
       FilterIndex = 0, 
       InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 
      }; 


      if (saveFileDialog.ShowDialog() == true) 
      { 
       SQLiteCommand cmd = new SQLiteCommand(); 
       String sSQL; 

       sSQL = "select * from Tile1"; 
       cmd.CommandText = sSQL; 
       clsCon.con.Open(); 
       cmd.Connection = clsCon.con; 
       SQLiteDataReader dr2; 
       dr2 = cmd.ExecuteReader(); 
       dr2.Read(); 

       DataSet _dataSet = new DataSet(); 
       DataTable _dataTable = new DataTable(); 

       for (var i = 0; i < dr2.FieldCount; i++) 
       { 
        _dataTable.Columns.Add("" + dr2.GetName(i) + "", typeof(string)); 
        _dataTable.Rows.Add("" + dr2.GetValue(i) + ""); 
       } 

       var rows = _dataTable.Rows; 

       StringBuilder sb = new StringBuilder(); 

       IEnumerable<string> columnNames = _dataTable.Columns.Cast<DataColumn>().Select(column => column.ColumnName); 
       sb.AppendLine(string.Join(",", columnNames)); 

       foreach (DataRow row in rows) 
       { 
        IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString()); 
        sb.AppendLine(string.Join(",", fields)); 
       } 

       File.WriteAllText(saveFileDialog.FileName, sb.ToString()); 

       clsCon.con.Close(); 
      } 
     } 
+5

"결과가 항상 첫 번째 행에 나타나는 이유"가 무엇을 의미하는지 명확하지 않습니다. 자세한 내용을 알려주십시오. –

+0

행의 결과가 각 열 대신에 첫 번째 행에서 연속적으로 내려 간다는 의미입니다. – redbeef

+0

글쎄 실제로 텍스트 파일에 쓰는 경우 결과를 Excel 표로 표시 했으므로 많은 도움이되지 않습니다. 텍스트 파일은 어떤 모습입니까? (그리고 당신이 수행 한 진단을 알려주십시오. 예를 들어, 디버거를 밟았습니까?) –

답변

-1

하는 코드를 약간 단순화하려고 그 DataTables 및 데이터 집합이 나에게 운전, 내 말은 너트 :

private void DataExport() 
{ 
    SaveFileDialog saveFileDialog = new SaveFileDialog 
    { 
     Title = "Choose file to save to", 
     FileName = ".csv", 
     Filter = "CSV (*.csv)|*.csv", 
     FilterIndex = 0, 
     InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 
    }; 

    if (!saveFileDialog.ShowDialog()) 
    { 
     return; 
    } 

    using (var conn = new SQLiteConnection(ConnectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = "SELECT * FROM Tile1"; 
     using (var reader = cmd.ExecuteReader()) 
     using (var writer = new StreamWriter(saveFileDialog.FileName)) 
     { 
      var columnNames = Enumerable 
       .Range(0, reader.FieldCount) 
       .Select(reader.GetName); 
      string header = string.Join(", ", columnNames); 
      writer.WriteLine(header); 
      while (reader.Read()) 
      { 
       var values = Enumerable 
        .Range(0, reader.FieldCount) 
        .Select(reader.GetValue); 
       string valuesRow = string.Join(", ", values); 
       writer.WriteLine(valuesRow); 
      } 
     } 
    } 
} 
+0

이것이 내가 필요한 작업입니다. D – redbeef

0

DataTable 객체가 올바르게 채워지지 않은 것 같습니다. 여기에 일부 :

for (var i = 0; i < dr2.FieldCount; i++) 
    { 
     _dataTable.Columns.Add("" + dr2.GetName(i) + "", typeof(string)); 
     _dataTable.Rows.Add("" + dr2.GetValue(i) + ""); 
    } 

난 당신이 여기에 데이터 테이블의 컬럼을 설정하려고 생각하지만 실제로는 다른 행으로 첫 번째 행의 각 열 값을 추가, 같은 시간에 행을 추가 할 수 없습니다 . 생성 한 테이블은 다음과 같습니다.

 col1  col2  col3  col4 
row1 val(1,1) 
row2 val(1,2) 
row3 val(1,3) 
row4 val(1,4) 

val (x, y)는 데이터베이스의 열 y와 행 x의 값을 의미합니다.

@Darin Dimitrov의 솔루션은 문제를 해결하는 데 매우 효과적입니다.

관련 문제