无法使用oledb将数据写入excel

时间:2014-03-27 04:44:05

标签: excel c#-4.0 oledb oledbconnection

我想将某些数据写入我的excel文件,为此我正在使用OLEDB。

我有大量的数据可以计入50000到60000条记录。

目前我的代码如下所示:

string connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ={0};Extended Properties ='Excel 12.0 Xml;HDR=YES;Mode=ReadWrite';", filePath);

using (OleDbConnection cn = new OleDbConnection(connectionString))

{

String statement = "UPDATE [Sheet1$] SET [Status] = @Status,  [Count] = @count WHERE [ID] = @Id";

 cn.Open();


for (int index = 0; index < _listResult.Count; index++)

{                                                      

      OleDbCommand cmd = new OleDbCommand(statement, cn);

      cmd.Parameters.AddWithValue("@Status", _listResult[index].Status);

      cmd.Parameters.AddWithValue("@count", _listResult[index].Count);

      cmd.Parameters.AddWithValue("@Id", _listResult[index].Id);

      cmd.ExecuteNonQuery();

}


 cn.Close();

但如果我这样做,那么数据不会更新到Excel工作表。

相反,我将For循环移到外部和内部,我打开连接并执行查询,然后它工作正常。但这需要花费很多时间。

我在这里做错了吗?

请给我适当的方法来实现这一目标。

任何帮助将不胜感激。

注意:刚才我发现当我从visual studio运行应用程序时,下面的代码正在运行,但是当我从那里运行发布版本并运行它时,它不会将数据写入excel表。请帮忙。

由于

2 个答案:

答案 0 :(得分:1)

您需要按如下方式拆分代码:

  1. 在循环之外 - 声明cmd。添加3个参数及其类型。请勿在此阶段指定值。
  2. 在循环内部 - 为参数分配适当的值,然后执行语句。
  3. 您的代码看起来应该是这样的(我假设所有参数都是整数,因此您需要根据实际类型进行修改):

    OleDbCommand cmd = new OleDbCommand(statement, cn);
    cmd.Parameters.Add("@Status", OleDbType.Integer);
    cmd.Parameters.Add("@count", OleDbType.Integer);
    cmd.Parameters.Add("@id", OleDbType.Integer);
    
    for (int index = 0; index < _listResult.Count; index++)
     {
      cmd.Parameters["@Status"].Value = _listResult[index].Status;
      cmd.Parameters["@count"].Value = _listResult[index].Count;
      cmd.Parameters["@Id"].Value = _listResult[index].Id;
      cmd.ExecuteNonQuery();
     }
    

答案 1 :(得分:0)

我正在使用此方法使用数据表在Excel中编写我想要的字段,您也可以尝试使用此

public void CerateExcel()
    {
        Response.ClearContent();
        Response.ClearHeaders();

        DataTable dt = new DataTable();
        dt = Session["table"] as DataTable;

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=ABC1.xls");
        Response.ContentType = "application/ms-excel";
        Response.ContentEncoding = System.Text.Encoding.Unicode;
        Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());


        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);

        form1.RenderControl(hw);

        Response.Write(sw.ToString());
        Response.Flush();
        Response.End();
}

在新页面中将您的数据添加到网格(html页面表单名称:form1),这将自动为您创建excel文件。