asp.net用DataSet导出Excel报错。

xianyao_shi 2013-05-19 08:17:12
这个是导出的函数,很奇怪啊我在本地导出正常的,放到服务器里就不行了。权限之类的我都已经给了。还有什么问题没弄呢,求各位大侠解答。。

/// <summary>
/// 将dt数据导出到Excel文件
/// </summary>
/// <param name="dt">数据集</param>
/// <param name="filename">文件名</param>
/// <param name="tabName">表名</param>
/// <param name="reMsg">返回消息</param>
/// <returns>bool</returns>
public bool DataTableExportToExcel(DataTable dt, string filename, String tabName, ref String reMsg)
{
#region 引用Interop.ADOX.dll

if (dt.Rows.Count <= 0)
{
reMsg = "目前无数据不需要导出";
return false;
}
int rows = dt.Rows.Count;
int cols = dt.Columns.Count;
StringBuilder sb = new StringBuilder();
string connString = String.Empty;
connString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", filename);

//创建表
sb.Append("CREATE TABLE " + tabName + " (");
String colName = String.Empty;
String colNames = String.Empty;
String colNamePramas = String.Empty;
String colType = String.Empty;
for (int i = 0; i < cols; i++)
{
colName = dt.Columns[i].ColumnName.ToString();
colType = dt.Columns[i].DataType.ToString();
colType = NetDataTypeToDataBaseType(colType);
if (i == 0)
{
sb.Append(colName + " " + colType);
colNames += colName;
colNamePramas += "@" + colName;
}
else
{
sb.Append(", " + colName + " " + colType);
colNames += "," + colName;
colNamePramas += ",@" + colName;

}

}
sb.Append(" )");
if (colNames == String.Empty)
{
reMsg = "数据集的列数必须大于0";
return false;
}

using (OleDbConnection objConn = new OleDbConnection(connString))
{
OleDbCommand objCmd = new OleDbCommand();
objCmd.Connection = objConn;
objCmd.CommandText = sb.ToString();
try
{
objConn.Open();
objCmd.ExecuteNonQuery();
}
catch (Exception e)
{
reMsg = "在Excel中创建表失败,错误信息:" + e.Message;
return false;
}



//写数据
sb.Remove(0, sb.Length);
sb.Append(" insert into " + tabName + " (" + colNames + ") values(" + colNamePramas + " )");
objCmd.CommandText = sb.ToString();
OleDbParameterCollection param = objCmd.Parameters;
for (int i = 0; i < cols; i++)
{
colType = dt.Columns[i].DataType.ToString();
colName = dt.Columns[i].ColumnName.ToString();
if (colType == "System.String")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.VarChar));
}
else if (colType == "System.DateTime")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Date));

}
else if (colType == "System.Boolean")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Boolean));

}
else if (colType == "System.Decimal")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Decimal));

}
else if (colType == "System.Double")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Double));

}
else if (colType == "System.Single")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Single));

}
else if (colType == "System.Single")
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Single));
}
else
{
param.Add(new OleDbParameter("@" + colName, OleDbType.Integer));
}

}

//遍历DataTable将数据插入新建的Excel文件中
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < param.Count; i++)
{
param[i].Value = row[i];
}

objCmd.ExecuteNonQuery();
}
}
reMsg = "数据成功导出";
return true;

#endregion
}
...全文
176 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhuihong2011 2013-09-24
  • 打赏
  • 举报
回复
楼主,我也出现跟你一样的问题了,可以把你的完整的代码发出来看看不
xianyao_shi 2013-05-19
  • 打赏
  • 举报
回复
已经自行解解,换了一直导出方式这种更好而且不涉足服务器的东西。
        string desktop =  DateTime.Now.ToString("yyyyMMdd HH:mm") + ".xls";//路径
        GridView gvOrders = new GridView();
        Response.Clear();
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + desktop);
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        //设置输出流为简体中文       
        this.EnableViewState = false;
        Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
        gvOrders.AllowPaging = false;
        gvOrders.AllowSorting = false;
        gvOrders.DataSource = dt1;
        gvOrders.DataBind();
        gvOrders.RenderControl(hw);
        Response.Write(sw.ToString());
        Response.End();
xianyao_shi 2013-05-19
  • 打赏
  • 举报
回复
唉,,这个帖子刚才已经看过了!! 不行啊,,
EnForGrass 2013-05-19
  • 打赏
  • 举报
回复
xianyao_shi 2013-05-19
  • 打赏
  • 举报
回复
我是在网页上操作导出,然后在页面输出导出结果,错误信息是: 在Excel中创建表失败,错误信息:Microsoft Jet 数据库引擎打不开文件''。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
EnForGrass 2013-05-19
  • 打赏
  • 举报
回复
服务器运行报什么错
xianyao_shi 2013-05-19
  • 打赏
  • 举报
回复
我觉得应该不是函数的问题,因为本地导出都是正常的,可能是IIS配置问题,但又不知道是哪里。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧