导入Excel到数据库,问题有三?

nimeide1234567890 2010-11-01 10:23:30
string excelStr = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + Server.MapPath("excelfile") + "/" + filename + ";Extended Properties=Excel 8.0 ";
OleDbConnection thisconnection = new OleDbConnection(excelStr);
thisconnection.Open();
string Sql = "select * from [Sheet1$]";
OleDbDataAdapter mycommand = new OleDbDataAdapter(Sql,thisconnection);
DataSet ds = new DataSet();
mycommand.Fill(ds, "[Sheet1$]");
thisconnection.Close();
GridView2.DataSource = ds;
GridView2.DataBind();

conn.Open();
int count = ds.Tables["[Sheet1$]"].Rows.Count;
for (int i = 0; i < count; i++)
{
string a_name, a_sex, a_nc, a_birthday, a_tel, a_mobile, a_email, a_msn_qq, a_ie, a_address, a_content;
a_name = ds.Tables["[Sheet1$]"].Rows[i]["姓名"].ToString();
a_sex = ds.Tables["[Sheet1$]"].Rows[i]["性别"].ToString();


问题有3:
1:EXCEL单元必须为[Sheet1$],这样就不太方便
2:行头必须写死,比如“姓名”“性别”,而不能写成“名字”“性别”
3:不能判断EXCEL里的数据是否规范,比如数据长度太长不能插入数据库,最好能给个提示为什么,最后能提示总共插入多少条,插入失败多少条
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
thycloud 2010-11-13
  • 打赏
  • 举报
回复
UP hehe
mingl11 2010-11-13
  • 打赏
  • 举报
回复
mark 也刚做了这个
打一壶酱油 2010-11-12
  • 打赏
  • 举报
回复
写一个函数封装你上面的代码,该函数有两个参数,
参数一 是excel 工作区 space,也就是你写的 '[Sheet1$]',
参数二是一个 结构体数组 test[] names,
test 就只是有两个成员变量的类,test{
private string databasename; //在数据库中的字段名称
private string excelname;//在excel 中的列名称,这样两者就可以对应起来了
}
相应地代码修改一下
循环 for (int i = 0; i < count; i++)
{
for(int j = 0; j < names.length; j++)
ds.Tables[space].Rows[i][names[j].excelname].ToString();
......
}
}

然后 循环中 names[j].excelname, names[j].databasename 想怎弄就怎弄,大概就这思路
a511900703 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yan267 的回复:]
1.可以读出Excel的工作表名称的。


C# code

public static string getFirsttableName(string excelFilepath)
{
string tableName = null;
if (File.Exists(excelFilepath))
……
[/Quote]
+1
nimeide1234567890 2010-11-12
  • 打赏
  • 举报
回复
这个问题还是没有解决
「已注销」 2010-11-01
  • 打赏
  • 举报
回复
EXCEL单元必须为[Sheet1$],这样就不太方便

这个能自己改的吧。要不就提示用户必须按工作区导
nimeide1234567890 2010-11-01
  • 打赏
  • 举报
回复
没有人顶我的,
guozhaoyou1 2010-11-01
  • 打赏
  • 举报
回复
第一个 工作簿名字可以任意改,可根据EXCEL文件 自动找出所有表名
第二 姓名 名字 这个你可以拿出数据库字段 再找出EXCEL字段 页面对应起来,这应数据库的一个字段就可以随意对应excel一个或多个字段
第三 你可以写成存储过程,定义输出参数吗,
比如
create Proc P_Excel_Insert
@重复数据 int output
@空行数据 int output
... 任意定义
as
事物begin
事物end
yan267 2010-11-01
  • 打赏
  • 举报
回复
1.可以读出Excel的工作表名称的。


public static string getFirsttableName(string excelFilepath)
{
string tableName = null;
if (File.Exists(excelFilepath))
{
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." +
"OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFilepath))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = dt.Rows[0][2].ToString().Trim();
}
}
return tableName;
}



2.列名可以用F1,F2来读的。

3.读出来后就是datatable了,你插入的时候可以判断的。然后给出提示也是一样的。和操作Excel没有多大关系。

62,271

社区成员

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

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

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

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