我的要求如下: 
excel 中的结构如下: 工号,姓名,社保基数,公积金基数,备注.数据库中结构如下. 工号,姓名,类别,部门名称,社保基数,公积金基数,社保类备注,备注.
并且已经有记录.(假如如下:)
工号,姓名, 类别,部门名称,社保基数,公积金基数,社保类备注,备注.
0001,小王1, 职员, 制造部,  
0002小王2,职员,制造部,         
0003,小王3,职员,管理部,  excel表中结构和记录如下:
工号,姓名, ,社保基数,公积金基数,社保类备注,备注.
0001,小王1,  1800,        1900              未缴         无
0002小王2,  1800,        1900              已缴        有
0003,小王3,  1800,        1900              未缴         无
0004, 未有,   2000,        3500              已缴           有
--------------------------------------------------------------------
我要excel中的数据列更新到数据库中数据列去. 匹配条件是 工号= 工号.
excel中的0004记录在数据库中没有的则不更新.-------------------------------------------------
我用datatable.merge方法发现全部当做新增的行了.-----------------------------
现在想只要得到结果就行了,不用merge也行.以上是表的示例,可否给个代码参考一下..............................
我全部的分都给你...............................................................

解决方案 »

  1.   

     public void ExcelToDS(string path)
        {
            string strSheetName = "sheet1";
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";             //Sql语句         
            string strExcel = "select * from  [" + strSheetName + "$] ";
            DataSet ds = new DataSet();            //连接数据源          
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();                 //适配到数据源        
            OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
            adapter.Fill(ds, "data");
            conn.Close();
            GridView1.DataSource = ds.Tables["data"];
            GridView1.DataBind();
            Label1.Text = ds.Tables[0].Rows.Count.ToString();
            SqlAccess.Sqldatabase sql = new SqlAccess.Sqldatabase();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                sb.Append("insert into data values('" + ds.Tables[0].Rows[i]["companyname"] + "','" + ds.Tables[0].Rows[i]["telname"] + "','" + ds.Tables[0].Rows[i]["qytel"] + "','" + ds.Tables[0].Rows[i]["fax"] + "');");
            }
            sql.ExecuteNonQuery(CommandType.Text, sb.ToString());
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = null;
            try
            {
                Boolean fileOK = false;
                String path = Server.MapPath("./doc/");
                if (FileUpload2.HasFile)
                {
                    String fileExtension = System.IO.Path.GetExtension(FileUpload2.FileName).ToLower(); String[] allowedExtensions =   { ".xls" };     //C#读取Excel中数据       
                    for (int i = 0; i < allowedExtensions.Length; i++)
                    {
                        if (fileExtension == allowedExtensions[i])
                        {
                            fileOK = true;
                        }
                    }
                }
                if (fileOK)
                {
                    fileName = "r_" + DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss") + "_" + DateTime.Now.Millisecond + System.IO.Path.GetExtension(FileUpload2.FileName).ToLower();
                    if (File.Exists(path + fileName))
                    {
                        Random rnd = new Random(10000);
                        fileName = fileName + rnd.Next();
                    }
                    FileUpload2.PostedFile.SaveAs(path + fileName);
                }
                else
                {
                }
            }        catch (Exception exp)
            { }
            ExcelToDS(Server.MapPath(".") + "\\doc\\" + fileName);
        }
      

  2.   

    我已经把excel中的数据读到了exceldatset中.
    具体如何做就不知道了.
    用sqlcommand? 
    还是sqlcommandbuilder?
      

  3.   

    how old are you?(怎么又是你)
      

  4.   

    ---------楼主资料---------
    登录名:poloyzhang
    总技术分:406
    总技术排名:48135
    ---------结贴情况---------
    截至:2010-07-29 16:02:21
    总发帖:13个
    正常结贴:10个
    未结贴:1
    结贴率:92.31%
    评语:楼主,你高的结贴率才是我们回答的动力!
    --------------------------