【问题标题】:C# Winforms: Mysql Database export to Excel errorC# Winforms:Mysql 数据库导出到 Excel 错误
【发布时间】:2017-02-06 09:48:22
【问题描述】:

您好,我的应用程序在将数据库导出到 Excel 期间出现了最后一个问题。正如您在下面看到的代码,我使用了两个不同的代码块,但不幸的是,在导出过程之后,当我打开 excel 文件时,两者都出现错误,并且没有打开任何东西。

错误通知窗口:文件可能已损坏或无法正常工作。文件格式或扩展名不匹配。

对于那些代码块,我将 Google Code 项目的 Excel 库添加到我的解决方案的“参考”中;

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 吗?我也很好奇如何让用户选择保存 excel 文件的位置?

【问题讨论】:

  • 你得到的错误是什么?

标签: c# mysql database excel import


【解决方案1】:

请尝试以下代码:

    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”中。

【讨论】:

  • 亲爱的 Nayan 感谢您的帮助,但我无法使用您的建议。所以我的问题是:我将在哪里声明 mySql 数据库连接信息? VS 一直为“FileExcel”提供错误,所以我认为它会要求“使用”但告诉我创建一个新类?
  • @Nuri,我添加了数据库连接字符串,并编辑了我对“FileExcel”的答案。现在请看一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多