c#.net从excel表导入数据到网页而达到快速增加数据库行的操作
建议你在网上搜pageoffice,有很多关于它的示例代码的,希望能帮到你。
在日常的项目中,Excel,Word,txt等格式的数据导入到数据库中是很常见
这里将分为.net导入Sql Server,Oracle数据库和WinForm导入Sql Server,Oracle数据库。
实现的基本思想:
1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹。
2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读。在联系数据库语句中,Data Source就是该文件在服务器上得物理路径
3,将第二步中读出的数据以DataTable对象返回。
4,遍历DataTable对象,然后到Sql Server数据库中查询,是否存在该条数据。如果存在,可以做更新,或者不做处理;如果不存在,则插入数据。
注意:在遍历DataTable的时候,可是使用dt.Rows[i]["Name"].ToString();Name为Name列的表头,所以Excel中列的顺序就无关紧要了。当然,前提是你知道Excel里列中各表头的名字。如果Excel中列的顺序固定,即可按下面代码中的方式进行。
添加的引用:
using System; using System.Data; using System.Data.OleDb; using System.Data.SqlClient; using System.IO; using System.Text; using System.Web; using System.Web.UI; private DataTable xsldata() { if(fuload.FileName == "") { lbmsg.Text = "请选择文件"; return null; } string fileExtenSion; fileExtenSion = Path.GetExtension(fuload.FileName); if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx") { lbmsg.Text = "上传的文件格式不正确"; return null; } try { string FileName = "App_Data/" + Path.GetFileName(fuload.FileName); if(File.Exists(Server.MapPath(FileName))) { File.Delete(Server.MapPath(FileName)); } fuload.SaveAs(Server.MapPath(FileName)); //HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\""; OleDbConnection conn; if(fileExtenSion.ToLower() == ".xls") { conn = new OleDbConnection(connstr2003); } else { conn = new OleDbConnection(connstr2007); } conn.Open(); string sql = "select * from [Sheet1$]"; OleDbCommand cmd = new OleDbCommand(sql, conn); DataTable dt = new DataTable(); OleDbDataReader sdr = cmd.ExecuteReader(); dt.Load(sdr); sdr.Close(); conn.Close(); //删除服务器里上传的文件 if(File.Exists(Server.MapPath(FileName))) { File.Delete(Server.MapPath(FileName)); } return dt; } catch(Exception e) { return null; } } protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e) { try{ DataTable dt = xsldata(); //dataGridView2.DataSource = ds.Tables[0]; int errorcount = 0;//记录错误信息条数 int insertcount = 0;//记录插入成功条数 int updatecount = 0;//记录更新信息条数 string strcon = "server=localhost;database=database1;uid=sa;pwd=sa"; SqlConnection conn = new SqlConnection(strcon);//链接数据库 conn.Open(); for(int i = 0; i 0) { updatecount++; } else { SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn); insertcmd.ExecuteNonQuery(); insertcount++; } } else { errorcount++; } } Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!")); } catch(Exception ex) { } }
你需要一个放一个fileupload控件 用来上传excel ,还需要在项目里建一个文件夹用来存放你要上传的excel 。因为系统总是先把文件传到服务器上再进行操作,而不是对每个人的桌面excel直接操作。
using System.Data.SqlClient;
using System.Data.OleDb; // 要加这两句
public DataSet ExecleDs(string filenameurl, string table) // 这个函数就是将上传的excel读入dataset
{
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"; // 这里excel03 如要该成07版再问我或者百度
string strcom = "select *from [Sheet1$]";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter odda = new OleDbDataAdapter(strcom, conn);
odda.Fill(ds, table);
return ds;
}
protected void Button4_Click(object sender, EventArgs e) // 你的那个确定按钮
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "server='CWJMXT-14\\SQLEXPRESS';database='E-test';uid='sa';pwd=‘..'" ; // 你自己的数据库连接
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文件时,返回
}
con.Open();
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
// Label2.Text = filename;
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; i++)
{
//string pininputdate = dr[i]["].ToString();//日期 excel列名【名称不能变,否则就会出错】
string insertstr = "insert into item1(试题组别,试题类型,试题题目,选项A,选项B,选项C,选项D,正确答案,随机或必出)values('" + dr[i][0].ToString() + "','" + dr[i][1].ToString() + "','" + dr[i][2].ToString() + "','" + dr[i][3].ToString() + "','" + dr[i][4].ToString() + "','" + dr[i][5].ToString() + "','" + dr[i][6].ToString() + "','" + dr[i][7].ToString() + "','" + dr[i][8].ToString() + "')"; //这里就是具体怎么样一行一行将dataset中的数据导入sql的 你也可以加一些其他判断什么的。 SqlCommand cmd = new SqlCommand(insertstr, con);
try
{
cmd.ExecuteNonQuery();
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}
}
Response.Write("<script>alert('Excle表导入成功!');location='itemmaintain.aspx'</script>");
}
con.Close();
}
楼上的说的很详细了,赞同。
羊仲大蒜: public static void DataTabletoExcel(System.Data.DataTable tmpDataTable,string strFileName) { int rowNum = tmpDataTable.Rows.Count; int columnNum = tmpDataTable.Columns.Count; int rowIndex = 1; int columnIndex = 0; Excel.Application ...
星子县19368616242: 怎样将EXCEL表格数据通过C#.NET导入到SQL数据库中? - ?
羊仲大蒜: 你完全可以把Excel当数据表一样读出来,然后再写进Sql 读Excel的方法:string strConn = "provider=Microsoft.Jet.OLEDB.4.0;data source=Excel文件;Extended Properties=Excel 8.0;"; OleDbConnection oleConn = new OleDbConnection(...
星子县19368616242: c#.net从excel表导入数据到网页而达到快速增加数据库行的操作?
羊仲大蒜: 唉,我也未解决的问题啊. 其实可以把excel当作一个数据库,通过一个语句就可以实现导入数据功能. 方法是1.先把数据文件上传到服务器 2.在服务器端导入. 可是当时我的数据库用户好像没有权限访问要导入的文件.所以我用了比较笨的方法,就是通过循环逐行导入... 建议你先试试- insert into 表 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)
星子县19368616242: c# 编写 导入Excel 数据程序 - ?
羊仲大蒜: foreach(datarow dr in dataset.tables[索引或者表名].建立一个与数据库中表相关联的dataset弹出对话框选择文件有现成的控件可以直接用;Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "//.Fill(myDataSet, " + filePath + " string strSQL = ...
星子县19368616242: 如何把excel 的数据导入到C#中 - ?
羊仲大蒜: 以excel为数据源,先导入到datagridview,在用c#操纵datagridview,试试
星子县19368616242: C#如何将EXCEL中的数据导入 - ?
羊仲大蒜: C#导入Excel中的数据,可以编写个引用,程序如下:openFileDialog1.Filter = "Execl files (*.xls)|*.xls"; openFileDialog1.FilterIndex = 0; openFileDialog1.RestoreDirectory = true; openFileDialog1.Title = "导入文件保存路径"; openFileDialog...
星子县19368616242: 如何用C#向EXCEL表格批量导入数据? - ?
羊仲大蒜: public int DataTabletoExcel(DataGridView tmpDataTable){if (tmpDataTable.RowCount==0)return 1;try{saveFileDialog1.Filter = "Execl files (*.xls)|*.xls";saveFileDialog1.FilterIndex = 0;saveFileDialog1.RestoreDirectory = true;...
星子县19368616242: C#.net中 实现excel导入导出sql server数据库! - ?
羊仲大蒜: 一.数据库向导本来就可以这样导入,在Excel建的字段,必须在table表中也得有字段.然后在SQL右键点击table表中的导入数据.选择Excel数据类型,就可以了二:protected void Button1_Click(object sender, System.EventArgs e){string XLS_Path...
星子县19368616242: C# 窗口程序导入数据到指定excel文件如何实现? - ?
羊仲大蒜: 指定EXCEL?那就是EXCEL已经存在咯,既然存在就不叫导入了,就直接连接他,然后枚举他的数据表,然后指定表把数据插入进去就好了.导入动作我们一般借助表格工具作为数据集合筛选容器,比如dataGridView,导入就是新建一个...
星子县19368616242: 在C#中如何实现用代码将excel导入到sql数据库中 - ?
羊仲大蒜: /// <summary>/// 从Excel读取数据/// </summary>/// <param name="filePath">路径</param>/// <returns>DataSet</returns> public DataSet ImportFromExcel(string filePath) { DataSet ds = new DataSet(); string connString = "Provider = Microsoft....