首页 新闻 会员 周边 捐助

用C#如何将Excel导入到SQL Server

0
悬赏园豆:10 [已解决问题] 解决于 2008-10-15 10:54

其实我现在在用ASP.NET做一个系统,要求将一个Excel表导入到数据库中问题是在.net 2.0框架下,如何将一个Excel表导入到SQL Server数据库呢?

这其中可能涉及到这么几个问题:

1. 因为Excel表中第一行可能是标题,从第二行开始才是数据

2. 将一个Excel表倒入到多个数据表中

3.Excel表中的数据类型可能同基本表中的数据类型不一致。

 

希望热心的朋友们能够帮助我,我将非常感激。

问题补充: 我希望朋友们可以给我一些好的方法 我已经查找过一些资料,希望朋友们答复时能够附上url或者源代码
iPeterRex的主页 iPeterRex | 初学一级 | 园豆:190
提问于:2008-10-02 00:08
< >
分享
最佳答案
0

Excel的导入一定给客户规定统一的模板,这样才能方便做业务处理.

我是这样做的.

首先将Excel的所有Sheet页全都读出来,请用户选择要处理的Sheet的页,获取Sheet页代码如下

Code
/ //
/// 获取Excel的表名[Sheet1$]
///
/// Excel的路径
/// DataTable
public static DataTable GetExcelTableName(string path)
{

var conn
= GetConnection(path);
var dt
= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);


conn.Close();
return dt;
}

返回的DataTable可以绑定到Listbox控件中,
当用户选择好要处理Sheet页后,将选择的Sheet页名称输入到下面的方法,以获取所选Sheet页的内容:

Code
///
/// 根据Excel的表名,获取相应表的内容
///
/// Excel的表名
/// Excel路径
///
public static DataTable GetExcelTable(string tableName,string path)
{

var sql
= string.Format("SELECT * FROM [{0}]", tableName);
var conn
= GetConnection(path);
var myCommand
= new OleDbDataAdapter(sql, conn);
var myDataSet
= new DataSet();
myCommand.Fill(myDataSet);
return myDataSet.Tables[0];
}

返回一个DataTable,这样你就可以根据自己的业务来处理DataTable中的数据了.
完整的代码如下:

Code
孙英雄 | 小虾三级 |园豆:857 | 2008-10-02 16:19

asdsadsadsa

52011314 | 园豆:200 (初学一级) | 2013-04-07 16:29
其他回答(4)
0

.NET有专门支持这个的类和接口,你可以MSDN一下

天堂口 | 园豆:514 (小虾三级) | 2008-10-02 10:52
1

1.建立与excel表的连接,获得工作表ObjWorkSheet,

using Microsoft.Office.Interop.Excel;

 

Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
Workbook ObjWorkBook;
Worksheet ObjWorkSheet = null;
ObjWorkBook = ObjExcel.Workbooks.Open(sPathName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in ObjWorkBook.Sheets)
            {
               if (sheet.Name.ToLower() == sheetName.ToLower())
                {
                     ObjWorkSheet = sheet;
                     break;
                }
            }
            if (ObjWorkSheet == null)
                throw new Exception(string.Format("{0} not found!!", sheetName));

2.得到单元格中的内容,注意i从1开始,j从1开始计,i==1时,对应字段名称所在的行

Range cell = (Range)ObjWorkSheet.Cells[i, j];

单元格的值为cell.value2

3.设置字段类型需要做一个交互界面,你先获得并显示字段名称,然后对其设置类型

4.由交互界面获得字段和字段类型,利用你的编程接口将excel的数据导入数据库

我的是用oracle数据库的,与你的接口不同,所以只能说这么多了.

groundhog | 园豆:170 (初学一级) | 2008-10-02 22:27
0

三类方式

1、oledb将excel文件当成数据库的方式来读,但是限制比较多。用于简单的读。

2、excel com组件,功能强,服务端要装excel,可能会遇到excel进程释放的问题,我一般将处理excel的部分放到单独的方法中,且及时调用退出方法,以及回收资源,在调用该方法的方法中手动调用GC回收资源。

3、二进制读,读方面有不错的开源项目,写我暂时没发现太好的开源项目。

5yplan | 园豆:1330 (小虾三级) | 2008-10-04 17:09
0

楼上说的比较全

我一般是用第一种方法 这种方法效率高些

张荣华 | 园豆:2020 (老鸟四级) | 2008-10-06 13:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册