请问 怎么将一个execl 文件上传到服务器,然后把execl工作表中的数据导入到SQL sever 数据库呀?

秋儿-Angel 2008-03-06 09:40:49
请问 怎么将一个execl 文件上传到服务器,然后把execl工作表中的数据导入到SQL sever 数据库呀?
...全文
514 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xh831213 2008-03-07
FileUpload 用这个控件来选择文件,使用一个控件名称为:fileupExcel
再定义一个Button,名称为 btnUploadExcel

选择文件以后,单击Button


protected void btnUploadExcel_Click(object sender, EventArgs e)
{
//判断要保存临时文件的路径是否存在,不存在则创建
if (!System.IO.Directory.Exists(@System.Web.HttpContext.Current.Server.MapPath("Temp")))
{
System.IO.Directory.CreateDirectory(@System.Web.HttpContext.Current.Server.MapPath("temp"));
}
string TempFileName = "temp" + Guid.NewGuid().ToString(); //临时文件名称
string TempFileUrl = "~/Temp/" + TempFileName + ".xls"; //临时相对文件路径
string strTempPath = System.Web.HttpContext.Current.Server.MapPath(TempFileUrl); //临时文件物理路径
if (this.CheckUpload(this.fileupExcel)) //判断上传文件的合法性
{
this.fileupExcel.PostedFile.SaveAs(strTempPath); //保存上传文件到临时文件

DataSet dsExcel = new DataSet();

dsExcel = GetExcelSource(strTempPath); //获取刚刚上传的文件的数据
//然后把dsExcel中的数据放到数据库中就好了,这个你自己写吧 }
}

/// <summary>
/// 判断要上传的文件的合法性
/// </summary>
/// <param name="upload">文件上传控件</param>
/// <returns>可以上传:true 不能或无需上传:false</returns>
public bool CheckUpload(System.Web.UI.WebControls.FileUpload upload)
{
if (upload.PostedFile.ContentLength > 0)
{
if (upload.PostedFile.ContentLength > 1024000)//判断大小
{
return false;
}
string strType = "xls";//判断类型
string[] arr_sType = strType.Split(';');
string strName = upload.PostedFile.FileName;
int nPos = strName.LastIndexOf(".");
if (nPos == -1)
{
return false;//没有扩展名
}
strName = strName.Substring(nPos + 1).ToLower();//取文件扩展名(不包括点)
for (int i = 0; i < arr_sType.Length; i++)
{
if (strName == arr_sType[i])
{
return true;//类型匹配了
}
}
return false;//如果没有从上面返回,就是类型不匹配
}
else
{
return false;//没有选择文件
}

/// <summary>
/// 得到服务器端Excel文件的数据
/// </summary>
/// <param name="filepath"></param>
private DataSet GetExcelSource(string filepath)
{
try
{
DataSet dsExcel = new DataSet();
Excel.Application app = new Excel.Application();
Excel.Workbooks workbooks;
Excel.Workbook workbook;
workbooks = app.Workbooks;
workbook = workbooks.Add(filepath);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=\"Excel 8.0;IMEX=1\"";
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + worksheet.Name + "$]", strConn);
oada.Fill(dsExcel);
Marshal.FinalReleaseComObject(worksheet);
worksheet = null;
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(workbook);
workbook = null;
workbooks.Close();
Marshal.FinalReleaseComObject(workbooks);
workbooks = null;
app.Quit();
Marshal.FinalReleaseComObject(app);
app = null;
GC.Collect();
return dsExcel ;
}
catch
{
}
}


  • 打赏
  • 举报
回复
秋儿-Angel 2008-03-07
文件上传就用File服务器端控件就好
导入数据库,如果你的Excel格式标准的话,可以把Excel当成数据库,使用OleDb连接
如果不标准,就要引入Excel来处理了
---------------------------------------------------------

在C# 中怎么操作execl呀? 能不能推荐一些资料呢? 谢谢 !
  • 打赏
  • 举报
回复
秋儿-Angel 2008-03-07
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\11.xls;Extended Properties=Excel 8.0')...[aa$]
————————————————

能说的具体一些吗? 有没有一个完整的例子呀? 发到我的邮箱 zhaoqiuxian66@yahoo.com.cn
  • 打赏
  • 举报
回复
秋儿-Angel 2008-03-07
这样的是不行的,因为我是要做一个导入的界面给用户操作,用户是不知道怎么用企业管理器操作数据导入的。
  • 打赏
  • 举报
回复
秋儿-Angel 2008-03-07
呵呵! 问题解决了! 谢谢7楼。
不过我在这里要补充一点:
execl是一个com组件,先要在工程中引用 Interop.Execl.dll。

还要加上
using System.Data.OleDb;
using System.Runtime.InteropServices;

找到上传的Execl文件的工作表的个数:
Excel.Application app = new Excel.Application();
Excel.Workbooks workbooks;
Excel.Workbook workbook;
workbooks = app.Workbooks;
workbook = workbooks.Add(strTempPath);
ddlExeclSheet.Items.Insert(0, new ListItem("--请选择工作表--", "0"));
for (int i = 1; i < workbook.Worksheets.Count+1; i++)
{
ddlExeclSheet.Items.Insert(i, new ListItem(((Excel.Worksheet)workbook.Worksheets[i]).Name, ((Excel.Worksheet)workbook.Worksheets[i]).Name));
}
  • 打赏
  • 举报
回复
zhaozhao110 2008-03-06
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\11.xls;Extended Properties=Excel 8.0')...[aa$]
  • 打赏
  • 举报
回复
北亮bl 2008-03-06
文件上传就用File服务器端控件就好
导入数据库,如果你的Excel格式标准的话,可以把Excel当成数据库,使用OleDb连接
如果不标准,就要引入Excel来处理了
  • 打赏
  • 举报
回复
hgdonline 2008-03-06
你直接用企业管理器连接上远程数据库服务器,再把Execl表导入进去不就行了吗?
不需要将EXCEL文件传上服务器的啊
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2008-03-06 09:40
社区公告

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

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