如何用sql语句从excel导入sql中

 我来答
matrixkey
2011-08-29 · TA获得超过277个赞
知道答主
回答量:163
采纳率:0%
帮助的人:168万
展开全部
我做过这个功能,分3步。
第一步,校验Excel的数据是否符合条件,比如不能为空,数据类型不能冲突等等。
第二步,在数据库里创建临时表,表结构跟excel一模一样。把数据从excel照搬到临时表中。
第三步,根据过滤条件,把符合的数据从临时表中insert到对象表中。
//新文件名称
string newfile = name + lastName; //假定excel文件名 最终数据.excel
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../../File/") + newfile + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";

insertTempTable(strConn); //存入临时表 包含第一步和第二步
insertAllTable(); //第三步

/// <summary>
/// 把数据从xls导入临时创建表
/// </summary>
/// <param name="conn"></param>
public void insertTempTable(string conn)
{
string strConn = conn;
//这里假设excel字段名称为 字段(序号,零件编号,零件名称,数量,价格)
//excel表名称为Matrixkey
string query = "SELECT [序号],[零件编号],[零件名称],[数量],[价格] FROM [Matrixkey$] Where [零件编号] <> '' ";

OleDbCommand oleCommand = new OleDbCommand(query, new OleDbConnection(strConn));

OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCommand);
DataSet PartsDataSet = new DataSet();
oleAdapter.Fill(PartsDataSet, "[Matrixkey$]");

DBAccess dba = DBAccessFactory.CreateAccess(); //这是我的数据库操作类
//存储过程 createtmptable 用来创建临时表 结构跟excel一模一样
dba.ExecuteProcedure("createtmptable");

foreach (DataRow row in PartsDataSet.Tables[0].Rows)
{
if (row["价格"].ToString() == "")
{row["价格"] = "0.00";}

dba.ExecuteInsertSQL(row, "tmpparts"); //执行第2步 创建的临时表叫tmpparts
}
}

/// <summary>
/// 执行最终的插入存储过程
/// </summary>
public void insertAllTable()
{
DBAccess dba = DBAccessFactory.CreateAccess();
//存储过程BuildRelation用来实现第3步 这个就简单了 我写个例子你看看
dba.ExecuteProcedure("BuildRelation");
}

存储过程:BuildRelation
insert into 对象表 --假设对象表字段为 ID No Code Name Quantity Price 其中ID自增
select * from tmpparts
where 零件编号 not in (select Code from tmpparts)

学会了哇?
追问
如果将你这个改成sql语句如何写呢?麻烦了。
百度网友bd0325f
2011-08-29 · TA获得超过373个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:197万
展开全部
DB:MsSQLServer2005
dbFile:2003 Excel
** 注意事项:
1. 以管理员身份登录SQL Server 外围应用配置器,然后点击功能外围应用配置器选中开启
既席远程调用和ole自动化服务
2. 重新启动mssqlserver 服务
3. 确保dbfile文件处于非活动状态(不要打开或有程序在读)
4.确保dbfile的列数与表结构一致
exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

EXEC sp_configure 'show advanced options', 1

GO

RECONFIGURE

GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 1

GO

RECONFIGURE

GO

SELECT * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' , 'Excel5.0;HDR=YES;DATABASE=e:\\testdata.xls',sheet$) ;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式