我想将某些数据写入我的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表。请帮忙。
由于
答案 0 :(得分:1)
您需要按如下方式拆分代码:
cmd
。添加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文件。