2017-02-06 3 views
0

もう一度、エクスポートデータベースでExcelに表示されるアプリケーションに最後の問題があります。下のコードを見ると、私は2つの異なるコードブロックを使用しましたが、エクスポートプロセスの後ではExcelファイルを開いたときに不幸にもエラーが発生し、何も表示されません。C#Winforms:ExcelデータベースへのMysqlデータベースのエクスポート

エラー通知ウィンドウ:ファイルが壊れているか、動作していない可能性があります。ファイル形式または拡張子が一致しません。

これらのコードブロックについては、Google CodeプロジェクトのExcelライブラリを私のソリューションの 'Referance'に追加しました。

using ExcelLibrary.CompoundDocumentFormat; 
using ExcelLibrary.SpreadSheet; 
using ExcelLibrary.BinaryDrawingFormat; 
using ExcelLibrary.BinaryFileFormat; 

// Original code block, first i used: 

string myConnection = "datasource=root;port=root;username=root;password=root"; 
MySqlConnection myConn = new MySqlConnection(myConnection); 
MySqlCommand cmdDataBase = new MySqlCommand("select name,surname,birth,telephone,email,city,adress,recorddate from doguAkdenizApp.team;", myConn); 
try 
{ 
    MySqlDataAdapter dataAdapter = new MySqlDataAdapter(); 
    dataAdapter.SelectCommand = cmdDataBase; 
    dbdataset = new DataTable(); 
    dataAdapter.Fill(dbdataset); 
    BindingSource bSource = new BindingSource(); 

    bSource.DataSource = dbdataset; 
    dgvEkip.DataSource = bSource; 
    dataAdapter.Update(dbdataset); 

    DataSet dataSet = new DataSet("ekipDataset"); 
    dataSet.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; 
    dataAdapter.Fill(dbdataset); 
    dataSet.Tables.Add(dbdataset); 
    ExcelLibrary.DataSetHelper.CreateWorkbook("ekipDataset.xls", dataSet); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

コードブロックは、上記の私は、インターネット上でこれを見つけたが、このブロックはうまく

string myConnection = "datasource=root;port=root;username=root;password=root"; 
MySqlConnection myConn = new MySqlConnection(myConnection); 
MySqlCommand cmdDataBase = new MySqlCommand("select name,surname,birth,telephone,email,city,adress,recorddate from doguAkdenizApp.team;", myConn); 

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(); 
dataAdapter.SelectCommand = cmdDataBase; 
dbdataset = new DataTable(); 
dataAdapter.Fill(dbdataset); 
BindingSource bSource = new BindingSource(); 

bSource.DataSource = dbdataset; 
dgvEkip.DataSource = bSource; 
dataAdapter.Update(dbdataset); 

dbdataset.WriteXml("Ekip_Dataset.xls"); //I am not sure why he used "WriteXml" but i tried as this 
MessageBox.Show("Dosya basariyla olusturulmustur."); 

だから何の問題がここにあるか、Excelにデータベースをエクスポートする別の方法がありますが動作しませんでした動作しませんでしたか?同様に、私はどのように私はユーザーにファイルを保存する場所を選択させることができます興味がありますか?

+0

エラーは何ですか? –

答えて

0

コードの下に試してみてください:

using FileExcel = Microsoft.Office.Interop.Excel; 

    string sqlConnection = "Data Source=Enter here you db string"); 
    /// <summary> 
    /// Function to write database content in excel sheet. 
    /// </summary> 
    /// <param name="tableName"></param> 
    /// <param name="localFileName"></param> 
    public void WriteDataToExcel(string tableName, string localFileName) 
    { 
     SqlConnection conn = new SqlConnection(sqlConnection); 
     object misValue = System.Reflection.Missing.Value; 
     FileExcel.Application xlApp = new FileExcel.Application(); 
     FileExcel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue); ; 
     FileExcel.Worksheet xlWorkSheet = (FileExcel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     try 
     { 
      //Read data from database. 
      conn.Open(); 
      SqlDataAdapter da = new SqlDataAdapter("select * from " + tableName + "", conn); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      string data = null; 
      int headerRowTotal = 0; 
      for (int i = 0; i < 1; i++) 
      { 
       for (int j = 0; j < ds.Tables[0].Columns.Count; j++) 
       { 
        xlWorkSheet.Cells[i + 1, j + 1] = ds.Tables[0].Columns[j].ToString(); 
       } 
       headerRowTotal++; 
      } 

      for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
      { 
       for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++) 
       { 
        data = ds.Tables[0].Rows[i].ItemArray[j].ToString(); 
        xlWorkSheet.Cells[headerRowTotal + i + 1, j + 1] = data; 
       } 
      } 
      //Check and delte file if already exist. 
      if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), localFileName))) 
      { 
       //Delete file. 
       File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), localFileName)); 
      } 
      xlWorkBook.SaveAs(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), localFileName), FileExcel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, FileExcel.XlSaveAsAccessMode.xlShared, FileExcel.XlSaveConflictResolution.xlUserResolution, true, misValue, misValue, misValue); 
      xlWorkBook.Close(true, misValue, misValue); 
      xlApp.Quit(); 
      releaseObject(xlWorkSheet); 
      releaseObject(xlWorkBook); 
      releaseObject(xlApp); 
     } 
     catch (Exception err) 
     { 
      MessageBox.Show(err.Message); 
      releaseObject(xlWorkSheet); 
      releaseObject(xlWorkBook); 
      releaseObject(xlApp); 
     } 
    } 

    /// <summary> 
    /// Function to release object of excel files. 
    /// </summary> 
    /// <param name="obj"></param> 
    private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception err) 
     { 
      obj = null; 
      MessageBox.Show(err.Message); 
     } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 

変数 "SqlConnectionオブジェクト" でのデータベースの接続文字列を入れてください。

+0

親愛なるナヤンあなたの助けてくれてありがとう、私はあなたの提案を使用することができませんでした。だからここで私の質問:私はMySQLのデータベース接続情報を宣言しますか? VSは "FileExcel"のエラーを残しているので、 "using"を要求すると思っていましたが、新しいクラスを作成するよう教えてくれましたか? –

+0

@Nuri、データベース接続文字列を追加しました。また、 "FileExcel"の答えを編集しました。今すぐ見てください。 –

関連する問題