asp.net中怎么将一个Excel文件中的数据导入到sql server数据库中

lclonger 2010-10-20 11:28:43
如题,请高手帮忙
...全文
742 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yan267 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lclonger 的回复:]
不好意思我看错了,问题解决了。

C# code
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = n……
[/Quote]

      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;
}


可以拿到第一个工作表的名称
lovehong123 2010-10-21
  • 打赏
  • 举报
回复
public void ReadExcel(string ExcelFile)
{
string ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + ExcelFile + ";Extended Properties=Excel 8.0";
OleDbConnection connection = new OleDbConnection(ConnectionString);
OleDbDataAdapter adp = new OleDbDataAdapter("SELECT * FROM score", connection);
DataSet ds = new DataSet();
adp.Fill(ds);
connection.Close();
}
paual779 2010-10-21
  • 打赏
  • 举报
回复
对于程序从Excel 拿数据,有三种:
1. Microsoft.Jet.OLEDB.4.0 (单元格有特殊格式,单元格数据程序拿不到)
2. Microsoft.ACE.OleDb.12.0 (服务器端不需要安装Office ,只需安装ACE 驱动即可,比Jet更强,但是如果EXCEL 单元格格式有特殊设置后,单元格数据也拿不到)
3. Microsoft.Office.Interop.Excel。 (程序拿数据一个一个单元格去读取,效率比较慢。但不管Excel 格式如何,都可以拿到数据。包括单元格里的文件等。服务器端需要安装Office)
paual779 2010-10-21
  • 打赏
  • 举报
回复
如果使用程序代码完成,可以使用批量
1. 从Excel 拿到数据DataTable
2.对DataTable进行一些验证操作
3. 使用 SqlBulkCopy 进行批量导入
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(ConfigurationManager.AppSettings["ConnectionString"]))
{
bcp.ColumnMappings.Add("客户编号", "Cust_Id");//源列与目标列匹配设置
bcp.BatchSize = 100; //每一批次的行数
bcp.DestinationTableName = "Rela_Stage";//目标表
bcp.WriteToServer(table);
}
4. 对导入的数据进行修正(删除某些验证时未处理的数据)
lclonger 2010-10-21
  • 打赏
  • 举报
回复

不好意思我看错了,问题解决了。
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [score$]", conn);
odda.Fill(ds, table);
return ds;

再问一个 如果导入的Excel没有score工作表,怎么判断给出提示?
yan267 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lclonger 的回复:]
谢谢各位,再问个问题循环插入数据库时怎么判断是否为空的问题
例:

C# code
if (dr[i]["AA"].ToString() != null && dr[i]["AA"].ToString() != "")
{
cs.AA = Double.Parse(dr[i]["AA"].ToStr……
[/Quote]


为空的判断好像没有错误,但是你确实这个值一定是数字?

要不用try-catch来cs.AA = Double.Parse(dr[i]["AA"].ToString());


try
{

cs.AA = Double.Parse(dr[i]["AA"].ToString());

}

catch(Exception ex)
{

看看是否有异常
}
lclonger 2010-10-21
  • 打赏
  • 举报
回复
大家帮帮忙呀
lclonger 2010-10-21
  • 打赏
  • 举报
回复
谢谢各位,再问个问题循环插入数据库时怎么判断是否为空的问题
例:
if (dr[i]["AA"].ToString() != null && dr[i]["AA"].ToString() != "")
{
cs.AA = Double.Parse(dr[i]["AA"].ToString());
}

就是说Excel中AA列可能为空 怎么判断呀?上面那样写不行
六子 2010-10-20
  • 打赏
  • 举报
回复
然后拿到返回的dataset中的第一个datatable,for遍历,插入数据库对应的列
六子 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lclonger 的回复:]
读取这样写吗?怎么把它插入到数据库对应的表中?


C# code
public void ReadExcel(string sExcelFile)
{
string sConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + sExcelFile + ";Exte……
[/Quote]

是的,DataSet ds = ExecleDs(savePath, filename); 这里调用读取方法
yan267 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lclonger 的回复:]
读取这样写吗?怎么把它插入到数据库对应的表中?


C# code
public void ReadExcel(string sExcelFile)
{
string sConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + sExcelFile + ";Exte……
[/Quote]

datatable dt = ds .Tables[0]


for(int i=0;i<dt.rows.count;i++)
{


insert into table (a,b,c)values(dt.rows[i]["A"].tostring().......)
}
lclonger 2010-10-20
  • 打赏
  • 举报
回复
读取这样写吗?怎么把它插入到数据库对应的表中?
public void ReadExcel(string sExcelFile)
{
string sConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + sExcelFile + ";Extended Properties=Excel 8.0";
OleDbConnection connection = new OleDbConnection(sConnectionString);
OleDbDataAdapter adp = new OleDbDataAdapter("SELECT * FROM score", connection);
DataSet ds = new DataSet();
adp.Fill(ds);
connection.Close();
}
六子 2010-10-20
  • 打赏
  • 举报
回复
前台:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ExcelToSQL.aspx.cs" Inherits="Questionnaire_ExcelToSQL" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />


<asp:Button ID="Btn_Input" runat="server" Text="导入Sql"
onclick="Btn_Input_Click" />
</div>
</form>
</body>
</html>


后台:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
using System.Data.SqlClient;
using Model;
using DBUtility;

public partial class Questionnaire_ExcelToSQL : System.Web.UI.Page
{
Answer_ClientInfo a_client = new Answer_ClientInfo();

protected void Page_Load(object sender, EventArgs e)
{

}


//导入Sql
protected void Btn_Input_Click(object sender, EventArgs e)
{
int res = 0;

if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名

if (IsXls != ".xls")
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回

}


SqlConnection cn = new SqlConnection(SqlHelper.ConnectionString);
cn.Open();
string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length-1; i++)
{
a_client.Client_name = dr[i]["客户名称"].ToString();
a_client.Client_company = dr[i]["所属单位"].ToString();
a_client.Client_phone = dr[i]["个人客户手机"].ToString();
a_client.Client_email = dr[i]["电子邮件"].ToString();
a_client.Client_address = dr[i]["地址"].ToString();

a_client.Market_id = DAL.MarketDAL.SelIdByMarketName(dr[i]["细分市场"].ToString());

//string sqlcheck = "select count(*) from [answer_client] where hhaspx_rq='" + hhaspx_rq + "'And hhaspx_xm='" + hhaspx_xm + "'"; //检查用户是否存在


res = DAL.Answer_ClientDAL.AddClient(a_client);
}
}

}


/// <summary>
/// 查询EXCEL电子表格添加到DATASET
/// </summary>
/// <param name="filenameurl">服务器路径</param>
/// <param name="table">表名</param>
///
public DataSet ExecleDs(string filenameurl, string table)
{
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [2010birtv客户$]", conn);
odda.Fill(ds, table);
return ds;
}

}
lchy110 2010-10-20
  • 打赏
  • 举报
回复
http://developer.51cto.com/art/200908/143737.htm
这就有类似操作excel的 你只管将excel的数据取出来然后insert到你的表
yan267 2010-10-20
  • 打赏
  • 举报
回复

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." +
"OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFilepath))
{
conn.Open();
string strCom = " SELECT " + columnName + " FROM [" + tableName + "]";///SQL操作语句,就是说:取得所有数据从Content
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, connExcel);
DataSet myDataSet = new DataSet();///建立新的数据集myDataSet
myCommand.Fill(myDataSet);///填充数据集
}




读出来了,就可以操作dataset了
lchy110 2010-10-20
  • 打赏
  • 举报
回复
将你的Excel文件配置为数据源
使用ADO.NET中的OleDbDataAdapter对象读取Excel文件
语法和操作SQL类似 表名就是你excel里的sheet名
lclonger 2010-10-20
  • 打赏
  • 举报
回复
有详细点的吗?前台后台代码,新手看起来有点困难[Quote=引用 1 楼 cpp2017 的回复:]
SQL code
SELECT * into t1
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="d:\a.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...sheet1$
[/Quote]
cpp2017 2010-10-20
  • 打赏
  • 举报
回复
SELECT * into t1
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="d:\a.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...sheet1$
bbb332 2010-10-20
  • 打赏
  • 举报
回复
学习学习、、、
wuyq11 2010-10-20
  • 打赏
  • 举报
回复
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\a.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$]
上传excel文档到服务器,再打开服务器上excel导入数据到数据库。
遍历excel,实现数据集更新,插入数据到数据库
using(OleDbConnection myConn = new OleDbConnection(""))
{
myConn.Open();
string str = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(str, myConn);
DataSet ds= new DataSet();
myCommand.Fill(ds);
myConn.Close();
}

加载更多回复(2)

62,243

社区成员

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

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

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

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