C#配置xml实现自动导入excel数据到数据库中对应的字段,麻烦各位大神帮帮忙!

IT_DQP 2014-04-27 04:17:52
因为有许多excel表格需要导入,每个表格格式不同,我想通过配置xml,来自动匹配excel表的列与数据库的列一一对应,然后导入数据库。希望各位帮帮忙,能给出详细解答,有代码示例更好,谢谢了
...全文
387 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalalanbai 2016-02-15
  • 打赏
  • 举报
回复
楼主把方法放上来撒
sp1234_maJia 2014-04-29
  • 打赏
  • 举报
回复
嗯,看错了,我还以为ie16楼的是lz。 不过结果是一样的。这根本不是xml的问题!!!!!!
  • 打赏
  • 举报
回复
引用 16 楼 wind_cloud2011 的回复:
这只是一个引子,细节还要你自己修改阿,可通过xml的文件名或其它来确定哪张表,再读取XML内容就可
这跟“xml”这个词儿的噱头没有关系。看到你纠结这个词儿,我不知道你可能会做什么,但是我知道你不会去做什么了。 要让用户简单地“描述”数据采集模板,需要研究用户的行为,研究 Excel 对象技术,研究其它有用的东西。而不是什么 xml。
  • 打赏
  • 举报
回复
引用 11 楼 u014013737 的回复:
我需要给用户使用,因此要写成通用的代码
最初级编程技术本身可能是很低级的,人人花上一万小时就能学会。如果你需要一点真本事的产品级技术,那么你需要掏钱。
  • 打赏
  • 举报
回复
引用 楼主 u014013737 的回复:
因为有许多excel表格需要导入,每个表格格式不同,我想通过配置xml,来自动匹配excel表的列与数据库的列一一对应,然后导入数据库。希望各位帮帮忙,能给出详细解答,有代码示例更好,谢谢了
Excel本身就支持 ADODB。可以写上几十行vba代码直接从 Excel 工作簿中读写关系数据库,也可以用 Excel 现成的功能(不用写代码)与关系数据库表进行简单同步。
wind_cloud2011 2014-04-29
  • 打赏
  • 举报
回复
这只是一个引子,细节还要你自己修改阿,可通过xml的文件名或其它来确定哪张表,再读取XML内容就可
祥子爱游戏 2014-04-29
  • 打赏
  • 举报
回复
把一个execl表指定一个库的表不行吗 你这样感觉很烦的
IT_DQP 2014-04-29
  • 打赏
  • 举报
回复
引用 13 楼 wind_cloud2011 的回复:
[/code]
13楼,这个方法可以,虽然没有解决我的问题,因为我需要excel表和数据库表自动匹配,导入时自动识别需要导入哪一张表,其中还涉及查询外表等等。但是你给的这个给了我灵感,谢谢你的解答
lolenboy 2014-04-28
  • 打赏
  • 举报
回复
把EXCEL想办法导入到SQL SERVER,如果能导入进去变成表,然后用数据库对象操作,这样最合理。 SQL SERVER 有导入工具的。
jimil 2014-04-28
  • 打赏
  • 举报
回复
如果是导数据这种一次性的活,我感觉你的做法有点多余,但你的要求的思路应该是: xml: <a sheet_name="sheet1"> <column old="xx" new="xx"> ........ 然后再读入,对比xml的attrib来实现列的对齐插入,可能我理解错你的意思了,如果是导数据,我真心认为,很多不同EXCEL就自己动手多种几个相同的窗体,里面就列对比自己手写一下还方便得多。
wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复
如果读取XML配置,读取XML相应的值

<?xml version="1.0" encoding="utf-8"?>  
      <table>  
        <info 字段1="aa"  字段2="bb" 字段3="cc" />  
      </table>    
      DataSet dt = new DataSet();  
      dt.ReadXml("t.xml");    
       string s1 = dt.Tables["info"].Rows[0]["字段1"].ToString();  
       string s2 = dt.Tables["info"].Rows[0]["字段2"].ToString();               
       string s3 = dt.Tables["info"].Rows[0]["字段3"].ToString();               
wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复

这是读取XML数据写到XLS里的,
 Excel.Application excel = new Excel.Application();
            int rowIndex = 1;
            int colIndex = 0;
            excel.Application.Workbooks.Add(true);            
            excel.AlertBeforeOverwriting = false;       
            DataSet ds = new DataSet();
            ds.ReadXml("test.xml");
            System.Data.DataTable table = ds.Tables[0];
            foreach (DataColumn col in table.Columns)
            {
                colIndex++;
                excel.Cells[1, colIndex] = col.ColumnName;
            }

            foreach (DataRow row in table.Rows)
            {
                rowIndex++;
                colIndex = 0;
                foreach (DataColumn col in table.Columns)
                {
                    colIndex++;
                    excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                }
            }
            excel.Visible = false;            
            excel.ActiveWorkbook.SaveAs(System.Windows.Forms.Application.StartupPath+"\\test.XLS", Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, true);            
            excel.Quit();
            excel = null;


wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复
IT_DQP 2014-04-28
  • 打赏
  • 举报
回复
自己顶一下,怎么会没人回答呢?帮个忙嘛
wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复
开始我理解错了,

           //从XML读取要入库的字段
            DataSet ds = new DataSet();
            ds.ReadXml("test.xml");
            string s1 = ds.Tables["info"].Rows[0]["字段1"].ToString();
            string s2 = ds.Tables["info"].Rows[0]["字段2"].ToString();
            string s3 = ds.Tables["info"].Rows[0]["字段3"].ToString();   
       //读取XLS的数据,写到ds中
            string namefile = System.Windows.Forms.Application.StartupPath + "\\test.XLS";
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + namefile + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            strExcel = "select * from [sheet1$]";
            OleDbDataAdapter oadapter = new OleDbDataAdapter(strExcel, strConn);
            DataSet ds0 = new DataSet();
            oadapter.Fill(ds0, "table1");

            //根据XML中的取的字段对应读取ds中的数据
            string name = ds0.Tables[0].Rows[0][s1].ToString();
            string no = ds0.Tables[0].Rows[0][s2].ToString();
            string old = ds0.Tables[0].Rows[0][s3].ToString();

           //写入到数据库中
            string connstring = "server=.;uid=sa;password=sa;database=test";       
            SqlConnection con = new SqlConnection(connstring);
            con.Open();
            string sql = "insert into student values('" + name + "','" + no + "','" + old + "')";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.ExecuteNonQuery();  



wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复
引用 11 楼 u014013737 的回复:
[quote=引用 7 楼 lolenboy 的回复:] 把EXCEL想办法导入到SQL SERVER,如果能导入进去变成表,然后用数据库对象操作,这样最合理。 SQL SERVER 有导入工具的。
我需要给用户使用,因此要写成通用的代码[/quote] =数据库的字段总是固定的吧
IT_DQP 2014-04-28
  • 打赏
  • 举报
回复
引用 7 楼 lolenboy 的回复:
把EXCEL想办法导入到SQL SERVER,如果能导入进去变成表,然后用数据库对象操作,这样最合理。 SQL SERVER 有导入工具的。
我需要给用户使用,因此要写成通用的代码
IT_DQP 2014-04-28
  • 打赏
  • 举报
回复
引用
如果是导数据这种一次性的活,我感觉你的做法有点多余,但你的要求的思路应该是: xml: <a sheet_name="sheet1"> <column old="xx" new="xx"> ........ 然后再读入,对比xml的attrib来实现列的对齐插入,可能我理解错你的意思了,如果是导数据,我真心认为,很多不同EXCEL就自己动手多种几个相同的窗体,里面就列对比自己手写一下还方便得多。
这个不是自己用,是让用户用的,页面太多不太好,还是有局限性,如果以后人家改动数据库或excel,就要不成了
IT_DQP 2014-04-28
  • 打赏
  • 举报
回复
引用
http://www.soaspx.com/dotnet/csharp/csharp_20120605_9243.html
方法倒是好,但是不能实现多样式的表格导入,有局限性,不可能表格变了还要去改代码吧
wind_cloud2011 2014-04-28
  • 打赏
  • 举报
回复
http://www.soaspx.com/dotnet/csharp/csharp_20120605_9243.html

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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