导入excel数据问题。。

mingl11 2010-11-16 11:25:48
现有50000左右条数据的excel导入数据库导致运行时间超时。要怎么解决这样数据稍大的导入?

...全文
137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinhuzhongjiezhe 2011-11-11
  • 打赏
  • 举报
回复
楼主解决了吗?还有程序吗
hookyzlr 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fellowcheng 的回复:]
如果是sql server的话
--如果接受数据导入的表已经存在

insert into 表 select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

--如果导入数据并生成表

select * into 表 from
……
[/Quote]
这个和1楼的说法都可以
myhope88 2010-11-16
  • 打赏
  • 举报
回复
逐条插入吧,不要拼接,或者分几次操作
a511900703 2010-11-16
  • 打赏
  • 举报
回复
不知道是个什么情况
fellowcheng 2010-11-16
  • 打赏
  • 举报
回复
如果是sql server的话
--如果接受数据导入的表已经存在

insert into 表 select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

--如果导入数据并生成表

select * into 表 from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
whb147 2010-11-16
  • 打赏
  • 举报
回复
SQL 的字符串最长才8000,你都5万条了,远远超过这个数了

是自己用还是客户用?
自己用就导入/导出吧

mingl11 2010-11-16
  • 打赏
  • 举报
回复
贴出我现在的代码,刚做时没想到会有这么多数据,想一次性拼接sql语句省的打开关闭数据库步骤减轻服务器压力,但数据多了就不行,我想就少拼接点多循环几次?
public int ImportVip(string path)
{
string oconnString = @"Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False;Data Source=" + path + "; Extended Properties=Excel 8.0";
OleDbConnection oconn = new OleDbConnection(oconnString);
oconn.Open();
OleDbCommand ocmd = new OleDbCommand("select Vip_Email,Vip_Phone,Vip_CN from [Sheet1$] group by Vip_Email,Vip_Phone,Vip_CN", oconn);
DataTable odt = new DataTable();
OleDbDataReader odr = ocmd.ExecuteReader();
odt.Load(odr);

int dtCount = odt.Rows.Count;
string sql = "";
for (int i = 0; i < dtCount; i++)
{
sql += "insert into VipCustomer (Vip_Email,Vip_PhoneNumber,VIP_CN) values ('" + odt.Rows[i][0] + "','" + odt.Rows[i][1] + "','" + odt.Rows[i][2] + "');";
}
int res = sqlhelper.ExecuteNonQuery(sql, CommandType.Text, null);
oconn.Close();
oconn.Dispose();
ocmd.Dispose();
return res;
}
wjq 2010-11-16
  • 打赏
  • 举报
回复
数据写入datatable,然后用blukcopy导入
mingl11 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 abcjun188 的回复:]
insert into VipCustomer (Vip_Email,Vip_PhoneNumber,VIP_CN)

select distinct Vip_Email,Vip_Phone,Vip_CN from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',shee……
[/Quote]

通过这种方式提示错误,
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
查了下好像是权限问题。。。我想不通是哪个权限,我给excel所在文件夹every权限也不行,
打一壶酱油 2010-11-16
  • 打赏
  • 举报
回复
insert into VipCustomer (Vip_Email,Vip_PhoneNumber,VIP_CN)

select distinct Vip_Email,Vip_Phone,Vip_CN from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)


上面是 sql 语句,c:\test.xls 改成 你的 path 就可以了
mingl11 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 abcjun188 的回复:]
为什么要执行 5000 多个 insert 呢,sql 基于 集才会快,迭代等等的比较慢,你这种情况直接一个
insert 就可以,比如 4楼的。
[/Quote]

这样是不是excel字段要和数据库对应?
打一壶酱油 2010-11-16
  • 打赏
  • 举报
回复
为什么要执行 5000 多个 insert 呢,sql 基于 集才会快,迭代等等的比较慢,你这种情况直接一个
insert 就可以,比如 4楼的。
syb1045 2010-11-16
  • 打赏
  • 举报
回复
select 出表结构, 把数据取出来填充, 放到数据集里面 然后同步更新到数据库

62,271

社区成员

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

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

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

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