问题是这样的。我现在用C#在做一个Excel导入到SQL数据库的工具。遇到一些麻烦,求高人指点,跪求啊。
问题开始了:比如我现在我有个Excel的表,里面的数据是一个员工信息。员工信息肯定有性别和员工部门。我在SQL中有相应的字段和数据,可是SQL中的性别和员工部门是通过字典来转换的,比如说,Excel中性别为男的在SQL的字典表里面性别的对应的值是1.女的为2.(再或者员工部门在Excel中的市场部在SQL字典表中对应的部门Id是12),现在需求就是让我们把Excel中性别为男的数据在插入到数据库的时候,男改成1,女改成2。求高手,有木有!!

解决方案 »

  1.   

    那你是用什么方法导入DB的呢?读Excel,自己用Sql执行吗?直接用个判断 gendar == "男" ? "1" : "2" ?
      

  2.   

    就是普通insert,在我插入前要转化成相应的代码段,然后把代码段插入表中。
      

  3.   

    不就是判断一下吗

    if{}else也可以啊
      

  4.   

    这个你只能定义一些规范,然后录入excel的时候按照这个规范录,这样才能保证你最后解析的时候,不会出错。
      

  5.   

    1.按照http://www.cnblogs.com/phcis/archive/2010/11/19/1881769.html将excle读入dataset
    2.循环dataset,里面判断对应列是,然后转换,之后insert into
      

  6.   

    都可以,?:本质上还是if()else,不必纠结这个。单独写个函数插入的,这样改起来方便
      

  7.   

    我也有过这个问题,不过我们的做法是,先把数据从EXCEL中读出来,放在DATEGRID或FARPOINT中,再去INSERT到DB中,中途有什么转换的都不是问题.
      

  8.   

    我写的不太清楚,补充下:我们要的字段比如说男女是从SQl数据库的字典表里面读出来的,在转化成对应的代码。如果用if else的话,那我部门也要转化的,难道我要写几百个if else。switch case 也不行啊,都是太多了。举个例啊,现在我的excel里面一个员工的部门是:销售部。。注意,是在excel里面的,现在我要导入到SQL中jbxx的表。导入的时候部门就不是销售部这几个字,而是在SQL字典表(dictionary)中销售部对应的代码(比如说是:12),这些转化在插入之前就要转化好,应为SQL表中的部门不是vchar类型的了,而是Int类型了。明白不
      

  9.   

    不是普通的INsERT 要参照SQL数据字典的表,把对应的男女转转成对应的代码。判断只针对男女,那部门怎么办啊?难道写一百个if else  。。看看我最佳的提问,谢谢哦
      

  10.   

    到处Execl语句需要进行修改,加上if条件判断,即可。
      

  11.   

    对对对,这个我理解,先弄个DataSet,把数据先放在DataSet里面,然后在DataSet里面update下,可是关键问题就是。方法不太清楚。因为我前面一直就做eclipse的,现在突然做.net。很多都忘记了。。
      

  12.   

    我写的不太清楚,补充下:我们要的字段比如说男女是从SQl数据库的字典表里面读出来的,在转化成对应的代码。如果用if else的话,那我部门也要转化的,难道我要写几百个if else。switch case 也不行啊,都是太多了。举个例啊,现在我的excel里面一个员工的部门是:销售部。。注意,是在excel里面的,现在我要导入到SQL中jbxx的表。导入的时候部门就不是销售部这几个字,而是在SQL字典表(dictionary)中销售部对应的代码(比如说是:12),这些转化在插入之前就要转化好,应为SQL表中的部门不是vchar类型的了,而是Int类型了。
      

  13.   

    晕LZ 没怎么聽明白
    ---------------
    string sex=="男"?"1":"2";
    varchar对应的就是string啊转换为int直接int.parse("xxx");
      

  14.   

    那事性别。请问部门怎么办啊?举个例啊,现在我的excel里面一个员工的部门是:销售部。。注意,是在excel里面的,现在我要导入到SQL中jbxx的表。导入的时候部门就不是销售部这几个字,而是在SQL字典表(dictionary)中销售部对应的代码(比如说是:12),这些转化在插入之前就要转化好,应为SQL表中的部门不是vchar类型的了,而是Int类型了。
      

  15.   

    先把excel导入到sql的临时表中,然后用多表查询
    例如 select a.id as 部门 from a inne join b on a.名称=b.部门
    testa
    depart1 1
    depart2 2
    depart3 3
    depart4 4testb
    depart1 other1
    depart2 other2
    depart3 other3
    depart4 other4select a.id,b.value from testa as a inner join testb as   b on a.name=b.name
      

  16.   

    你在读取的时候,或者是插入之前赋值时,做判断,重新赋值。性别只有2个判断,那么部门还不是一样的么?难道你们公司有好几百的部门?
    或者说你也可以把数据库里的部门读出来,然后根据excel读取出来的部门做判断,如果部门名称相同,直接获取数据库里读取出来的id插入数据库就好了。
      

  17.   

    顶一个
    如果不想用多表。也可以把字典里的数据单独放在一个Dictionary中。比如用'男'当key 值是 1
    这样在插入时可以直接插入值
      

  18.   

    建一个临时表,用来建立EXECl中部门名称和数据库ID之间的对应
    EXECL中读出来的数据直接到该表中查询得 
      

  19.   

    先把excel中的‘男’或‘女’转换成相应的数字 然后用insert语句把得到数字那个列插入到数据就ok了
      

  20.   


    没错 先将各个表链接     刷选出记录后再insert到数据库中   
      

  21.   

    放个fileupload//excel类
    public class ExcelObject
    {
        private string excelFile;
        OleDbConnection conn;    public ExcelObject(string ExcelFileName)
        {
            System.IO.FileInfo fi = new System.IO.FileInfo(ExcelFileName);
            if (fi.Extension.ToLower() == ".xls")
                conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + ExcelFileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
            else
                conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFileName + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'");    }
     public DataTable GetTable(string SheetName)
        {
            try
            {
                string sheetName = SheetName;
                if (!sheetName.EndsWith("$"))
                    sheetName = sheetName + "$";
                conn.Open();
                DataTable dt=new DataTable();
                string sql = "select * from [" + sheetName + "]";
                OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
                da.Fill(dt);
                conn.Close();
                return dt;
            }
            catch
            {
                conn.Close();
                return null;
            }
        }
    }//上传
     protected void btnUpLoad_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                System.IO.FileInfo fi = new System.IO.FileInfo(FileUpload1.FileName);
                if (fi.Extension.ToLower() == ".xls" || fi.Extension.ToLower() == ".xlsx")
                {
                    string file = string.Format("XX_{0}{1}", UserID, fi.Extension);
                    string destfile = Server.MapPath("ProductExcel/" + file);
                    FileUpload1.SaveAs(destfile);
                    btnUpLoad.CommandArgument = destfile;
                    ExcelObject eo = new ExcelObject(destfile);
                    ddltable.Items.Clear();
                    foreach (string s in eo.GetTables())
                        ddltable.Items.Add(s);
                }
                else
                {
                    Alert("请确认您上传的是Excel文件");
                }
            }
            else
            {
                Alert("请选择文件");
            }
        }//insert 
    ExcelObject eo = new ExcelObject(btnUpLoad.CommandArgument);
    DataTable dt1 = eo.GetTable(ddltable.SelectedValue);
      

  22.   

    剩下的就不说了 无非就是 DataTable dt= XXXXXXXXX;//取目的表字段名
    foreach(DataRow dr in dt1.rows)
    {
       datarow dr1 =dt.newrow();
       dr1["XX"]=dr["XX"]
       dr2["YY"]=dr["yy"].tostring()=="男"?1:2;
       ……
    }
    //最后用sqlcommandbuilder 更新下数据 就成了
      

  23.   


    上面手误写错了 dr1[XX] dr1[yy]