从sql2008数据库中导出数据时出现 “异常来自 HRESULT:0x800A03EC”,是什么问题呢?
代码在下面,高手帮忙看看是咋回事呀?
#region 读取新闻
using (SqlConnection conn1 = new SqlConnection(GetConStr()))
{
conn1.Open();
using (SqlCommand cmd1 = new SqlCommand(cmdT, conn1))
{
//得到ID
DataSet ds = new DataSet();
string fileName = name + identity;
SqlDataAdapter da = new SqlDataAdapter(cmd1);
da.Fill(ds); #region 生成Excel文档 //创建一个Excel应用程序实例
Microsoft.Office.Interop.Excel.Application objExcel = new Microsoft.Office.Interop.Excel.Application();
//objExcel.Visible = true; //使用这段代码,你将到到Excel应用程序打开 //创建一个Excel文件(未保存,无文件名)
Workbooks objWorkbooks = objExcel.Workbooks;
_Workbook objWorkbook = objWorkbooks.Add(XlWBATemplate.xlWBATWorksheet);//默认创建sheet1 Sheets objSheets = objWorkbook.Worksheets;
_Worksheet objWorksheet = (_Worksheet)objSheets.get_Item(1);
objWorksheet.Name = "MySheet"; Range range = objWorksheet.get_Range("A2", "E3"); //生成标题 string[] columns = { "品牌编号", "品牌名称", "品牌的新闻总数", "媒体", "品牌",
"新闻标题",
"新闻摘要",
"版位编号",
"报道时间",
"文章记者", "原文内容", "报道字数",
"版面比例", "报道面积", "新闻连接",
"传播价值", "细分层面", "是否首页",
"新闻图片", "图片数量", "文章基调编号",
"主题_主题编", "传播主旨编号", "首发/转发/评论编号",
"报道性质编号", "版位特点编号", "区域编号", "城市编号",
"报道类别编号", "添加录入时间", "用户编号", "来源", "附件",
"指数", "行业ID", "企业ID", "主,被动传播", "xml自定义列"};
for (int k = 1; k <= columns.Length; k++)
{
range[0, k] = columns[k - 1].ToString();
}
//写入数据
int i = 1;
foreach (DataRow row in ds.Tables[0].Rows)
{
for (int j = 1; j <= ds.Tables[0].Columns.Count; j++)
{
range[i, j] = row[j - 1].ToString();
}
i++;
} objExcel.DisplayAlerts = false; //保存文件(如果使用objWorkbook.SaveAs将不兼容excel2000,excelxp)
objWorkbook._SaveAs(@"E:\ERS新闻数据\" + BrandName + "__" + dr["TOTAL"].ToString() + ".xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value); //关闭文件
objWorkbook.Close(false, @"E:\ERS新闻数据\ghj.xls", false);
//objExcel.Visible = false;
objExcel = null; //Microsoft.Office.Interop.Excel.ApplicationClass ac = new Microsoft.Office.Interop.Excel.ApplicationClass(); //ac.DefaultFilePath = "";
//ac.SheetsInNewWorkbook = 2;//在创建excel的xls文件的时候默认有两个sheet
//ac.DisplayAlerts = false;//在执行saveas方法时候不弹出提示对话框,比如有同名文件是否覆盖,设成false会直接覆盖
//Microsoft.Office.Interop.Excel.Workbook wb = ac.Workbooks.Add(Type.Missing);//Workbook相当于一个excel的xls文件
//Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)ac.Worksheets[2];//因为前面设置了有两个sheet,所以这里是取得第2个sheet, Worksheet相当于excel文件中的一个sheet,另外注意excel的索引都是从1开始的
//foreach (DataRow row in ds.Tables[0].Rows)
//{ // for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
// {
// for (int j = 0; j < 38; j++)
// {
// ws.Cells[j, i] = row[j].ToString();
// } // //ac.Cells[1, 1] = row[0].ToString();
// //// ws.Cells[1, 1] = "hello121";//往第2个sheet中的第1行第1列的格子中赋值"hello";
// //ac.Cells[1, 2] = "i love u";//这是往第一个sheet赋值,当像applicationclass中添加了workbook后它的cells应该只能访问到第1个sheet中的cell
// }
//} ////保存文件,Excel.XlSaveAsAccessMode是设置文件的访问方式的,其他的参数可以省略
//wb.SaveAs(@"e:\test.xls", 0, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ////重要,关闭excel,清除掉excel.exe进程
//ac.Workbooks.Close();//关闭所有文件
//ac.Quit();//结束excel.exe,这行必须有,没有上一行也可以,就相当于关闭了excel应用程序,其中的文件也一同关闭了 ////以下几行至关重要,在ASP.NET中如无这几行,会导致excel进程无法清除的情况,这样最后会导致内存被每次导出启动的excel进程撑死,只有加上以下几行,才能将进程关闭。
//int generation = GC.GetGeneration(ac);
//System.Runtime.InteropServices.Marshal.ReleaseComObject(ac);
//ac = null;
//GC.Collect(generation);
#endregion }
conn1.Close();
UpID = InfoID + 1;
identity++;
}
#endregion
代码在下面,高手帮忙看看是咋回事呀?
#region 读取新闻
using (SqlConnection conn1 = new SqlConnection(GetConStr()))
{
conn1.Open();
using (SqlCommand cmd1 = new SqlCommand(cmdT, conn1))
{
//得到ID
DataSet ds = new DataSet();
string fileName = name + identity;
SqlDataAdapter da = new SqlDataAdapter(cmd1);
da.Fill(ds); #region 生成Excel文档 //创建一个Excel应用程序实例
Microsoft.Office.Interop.Excel.Application objExcel = new Microsoft.Office.Interop.Excel.Application();
//objExcel.Visible = true; //使用这段代码,你将到到Excel应用程序打开 //创建一个Excel文件(未保存,无文件名)
Workbooks objWorkbooks = objExcel.Workbooks;
_Workbook objWorkbook = objWorkbooks.Add(XlWBATemplate.xlWBATWorksheet);//默认创建sheet1 Sheets objSheets = objWorkbook.Worksheets;
_Worksheet objWorksheet = (_Worksheet)objSheets.get_Item(1);
objWorksheet.Name = "MySheet"; Range range = objWorksheet.get_Range("A2", "E3"); //生成标题 string[] columns = { "品牌编号", "品牌名称", "品牌的新闻总数", "媒体", "品牌",
"新闻标题",
"新闻摘要",
"版位编号",
"报道时间",
"文章记者", "原文内容", "报道字数",
"版面比例", "报道面积", "新闻连接",
"传播价值", "细分层面", "是否首页",
"新闻图片", "图片数量", "文章基调编号",
"主题_主题编", "传播主旨编号", "首发/转发/评论编号",
"报道性质编号", "版位特点编号", "区域编号", "城市编号",
"报道类别编号", "添加录入时间", "用户编号", "来源", "附件",
"指数", "行业ID", "企业ID", "主,被动传播", "xml自定义列"};
for (int k = 1; k <= columns.Length; k++)
{
range[0, k] = columns[k - 1].ToString();
}
//写入数据
int i = 1;
foreach (DataRow row in ds.Tables[0].Rows)
{
for (int j = 1; j <= ds.Tables[0].Columns.Count; j++)
{
range[i, j] = row[j - 1].ToString();
}
i++;
} objExcel.DisplayAlerts = false; //保存文件(如果使用objWorkbook.SaveAs将不兼容excel2000,excelxp)
objWorkbook._SaveAs(@"E:\ERS新闻数据\" + BrandName + "__" + dr["TOTAL"].ToString() + ".xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value); //关闭文件
objWorkbook.Close(false, @"E:\ERS新闻数据\ghj.xls", false);
//objExcel.Visible = false;
objExcel = null; //Microsoft.Office.Interop.Excel.ApplicationClass ac = new Microsoft.Office.Interop.Excel.ApplicationClass(); //ac.DefaultFilePath = "";
//ac.SheetsInNewWorkbook = 2;//在创建excel的xls文件的时候默认有两个sheet
//ac.DisplayAlerts = false;//在执行saveas方法时候不弹出提示对话框,比如有同名文件是否覆盖,设成false会直接覆盖
//Microsoft.Office.Interop.Excel.Workbook wb = ac.Workbooks.Add(Type.Missing);//Workbook相当于一个excel的xls文件
//Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)ac.Worksheets[2];//因为前面设置了有两个sheet,所以这里是取得第2个sheet, Worksheet相当于excel文件中的一个sheet,另外注意excel的索引都是从1开始的
//foreach (DataRow row in ds.Tables[0].Rows)
//{ // for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
// {
// for (int j = 0; j < 38; j++)
// {
// ws.Cells[j, i] = row[j].ToString();
// } // //ac.Cells[1, 1] = row[0].ToString();
// //// ws.Cells[1, 1] = "hello121";//往第2个sheet中的第1行第1列的格子中赋值"hello";
// //ac.Cells[1, 2] = "i love u";//这是往第一个sheet赋值,当像applicationclass中添加了workbook后它的cells应该只能访问到第1个sheet中的cell
// }
//} ////保存文件,Excel.XlSaveAsAccessMode是设置文件的访问方式的,其他的参数可以省略
//wb.SaveAs(@"e:\test.xls", 0, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ////重要,关闭excel,清除掉excel.exe进程
//ac.Workbooks.Close();//关闭所有文件
//ac.Quit();//结束excel.exe,这行必须有,没有上一行也可以,就相当于关闭了excel应用程序,其中的文件也一同关闭了 ////以下几行至关重要,在ASP.NET中如无这几行,会导致excel进程无法清除的情况,这样最后会导致内存被每次导出启动的excel进程撑死,只有加上以下几行,才能将进程关闭。
//int generation = GC.GetGeneration(ac);
//System.Runtime.InteropServices.Marshal.ReleaseComObject(ac);
//ac = null;
//GC.Collect(generation);
#endregion }
conn1.Close();
UpID = InfoID + 1;
identity++;
}
#endregion
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货