.net web Excel Sql导入导出完美方案(1)

本文介绍了一种在WEB环境下,不依赖任何组件实现Excel文件的导入导出的方法。通过示例代码展示了如何在虚拟主机环境中创建Excel文件并进行数据操作。

(无须引用EXCEL组件)不吃素的牛

------------------------------------------------------------------------------

最近小牛由于工作需要,需要制作可导入导出数据的方案。

基于WEB,环境是虚拟主机+SQL数据库

在网上一搜,漫天遍地的资料,看了好几个,感觉都差不多,基本上是针对WINFORM框架的

基于WEB的很少提及,不管,先写代码测试下再说。

引用EXCEL.DLL文件,真的很方便,象操作数据库一样操作。本以为解决了,在本地测试已成功。

后来关注到EXCEL.DLL文件,需引用此类库,而且目标电脑上须有安装OFFICE(即服务器需要注册excel的com)

这下有问题了,我的是虚拟主机啊。没这么大的权限要人家装什么就装什么,这样的话被动性就太大了,考虑到

稳定性,只能继续研究了/

当然,没有解决不了的问题,只有想不想解决的问题。

网上很多牛人都有提及过,我也只是针对于我的WEB环境(虚拟空间),对与我相同环境设置的菜菜一起分享,我想我的

环境是比较经典的,大部份人都是使用虚拟主机的,没有ADMIN管理权,当然如果你有独立服务器,想必也不用研究怎么

样导入导出了.

如有不正确的,请大牛多多PP。。

下面综合我的测试总结如下,希望对基于WEB开发的用户有帮助。(无组件,基于WEB,EXCEL导入导出)

 

先讲Excel导出:

关键引用

我这里做一个简单的建立xls文件操作,然后建立表插入一些数据操作,抛砖引玉。

1.测试能否建立xls

先在你的网站下建立一个xlsfile文件夹,以后生成的文件就放在里面。

新建一个toexcel.aspx页面,建立一个按钮(Button),双击进入后台页面

在toexcel.aspx.cs添加引用 using System.Data.OleDb;

protected void Button3_Click(object sender, EventArgs e)
{
string testPath = Server.MapPath("~/xlsfile/test.xls");
string sql = "Create table Sheet1(aa varchar,bb varchar)";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + testPath + "';Extended Properties='Excel 8.0'";
OleDbConnection oleConn = new OleDbConnection(connectionString);
OleDbCommand oleCmd=new OleDbCommand(sql,oleConn);
try
{
oleConn.Open();
oleCmd.ExecuteNonQuery();

}
catch (System.Exception ex)
{

throw;
}
finally
{
oleConn.Dispose();
oleConn.Close();
}


}


如果正常的话,会在xlsfile文件夹下面新建一个test.xls文件,打开文件里面的内容是aa bb两个字段。

如果没有文件,请先确定是否有手动新动xlsfile文件夹.

注意toexcel.aspx文件与xlsfile文件是同一级的,别把toexcel.aspx 文件放在xlsfile文件夹里面。

 

下面是方法,直接调用就行了。传递参数为一个表DataTable dt,一个存放路径string excelPath

代码均验证过,直接从VS2005里面复制过来的

public string OutExcel(DataTable dt, string excelPath)
{
if (dt == null)
{
return "DataTable不能为空";
}

int rows = dt.Rows.Count;
int cols = dt.Columns.Count;
StringBuilder sql = new StringBuilder();
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + excelPath + "';Extended Properties='Excel 8.0'";
if (rows == 0) //判断是否有内容
{
return "没有数据";
}

sql.Append("create table Sheet1 ( ");


for (int i = 0; i < cols; i++) //循环查找dt列(字段)
{
if (i < cols - 1)
sql.Append(string.Format("{0} varchar ,", dt.Columns[i].ColumnName)); //(字段)
else
sql.Append(string.Format("{0} varchar)", dt.Columns[i].ColumnName));
}

using (OleDbConnection oleConn = new OleDbConnection(connectionString))
{
OleDbCommand oleCmd = new OleDbCommand(sql.ToString(),oleConn);

try
{
oleConn.Open();
oleCmd.ExecuteNonQuery(); //执行sql
}
catch (Exception e)
{
return "在Excel中创建表失败,错误信息:" + e.Message;
}

//生成插入数据脚本 生成插入数据脚本
sql.Remove(0, sql.Length);
sql.Append("INSERT INTO ");
sql.Append("Sheet1 ( ");

for (int i = 0; i < cols; i++)
{
if (i < cols - 1)
sql.Append(dt.Columns[i].ColumnName + ",");
else
sql.Append(dt.Columns[i].ColumnName + ") values (");
}

for (int i = 0; i < cols; i++)
{
if (i < cols - 1)
sql.Append("@" + dt.Columns[i].ColumnName + ",");
else
sql.Append("@" + dt.Columns[i].ColumnName + ")");
}



//建立插入动作的Command
oleCmd.CommandText = sql.ToString();
OleDbParameterCollection param = oleCmd.Parameters;

for (int i = 0; i < cols; i++)
{
param.Add(new OleDbParameter("@" + dt.Columns[i].ColumnName, OleDbType.VarChar));
}

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

oleCmd.ExecuteNonQuery();
}

return "数据已成功导入Excel";
}//end using
}

 

待续…
(文章可以自由转载,但请注明出处跟作者)

转载于:https://www.cnblogs.com/shanhuo/archive/2009/11/02/1594273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值