2个sheet分别导到2张表里.sheet里的字段顺序和表里的字段顺序是一样的.

解决方案 »

  1.   

       private DataSet GetExcelCollection(string filepath)
        {        string strCon, strCmm, strCmm1;
            strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
            OleDbConnection oleCnn = new OleDbConnection(strCon);
            oleCnn.Open();
            strCmm = "select TestID,SerID,PreChoiceNumber,PostChoiceNumber from [Sheet1$]";
            strCmm1 = "select TestID,ChoiceNumber,Label,Description from [Sheet2$]";
            OleDbCommand oleCmm = new OleDbCommand(strCmm, oleCnn);
            OleDbCommand oleCmm1= new OleDbCommand(strCmm1, oleCnn);
            OleDbDataAdapter oleDa = new OleDbDataAdapter(oleCmm);
            OleDbDataAdapter oleDa1 = new OleDbDataAdapter(oleCmm1);
            DataSet ds = new DataSet();
            DataSet ds1 = new DataSet();        //oleDa.Fill(ds, "[Sheet1$]");
            oleDa.Fill(ds,"[Sheet1$]");
            oleDa1.Fill(ds1,"[Sheet2$]");
           oleCnn.Close();       //GridView1.DataSource = ds;
           //GridView2.DataSource = ds1;
          //  GridView1.DataBind();
          //  GridView2.DataBind();
            return ds;
            return ds1;
        }    public void DataTableInsertRespCalcDB(DataSet ds, string testid,DataSet ds1)
        {
            SqlConnection conn = null;
            conn = DBUtil.creatConnection();
            
            //SqlTransaction tran = null;            if (testid == ds.Tables[0].Rows[0].ItemArray[0].ToString())
                {
                    try
                    {
                        conn.Open();
                      // tran = conn.BeginTransaction();                    DataTable dataTable1 = new DataTable();
                        SqlDataAdapter sqlDA1 = new SqlDataAdapter(@"SELECT * FROM RespCalc", conn);
                        DataTable dataTable2 = new DataTable();
                        SqlDataAdapter sqlDA2 = new SqlDataAdapter(@"SELECT * FROM Choice", conn);
       
                        SqlCommandBuilder sqlCB1 = new SqlCommandBuilder(sqlDA1);
                        sqlDA1.Fill(dataTable1);
                        SqlCommandBuilder sqlCB2 = new SqlCommandBuilder(sqlDA2);
                        sqlDA2.Fill(dataTable2);
                        foreach (DataRow dataRow in ds.Tables[0].Rows)
                        {
                            //int len = dataRow.ItemArray.Length;
                            //Logger.Log("The Length is " + len);
                            //for (int i = 0; i < len; i++)
                            //{
                            //    Logger.Log("Item " + i + dataRow.ItemArray[i]);
                            //}                        DataRow dataRow1 = dataTable1.NewRow();
                            dataRow1["TestID"] = testid;
                            dataRow1["SerID"] = dataRow[1];
                            dataRow1["PreChoiceNumber"] = dataRow[2];
                            dataRow1["PostChoiceNumber"] = dataRow[3];
                            dataTable1.Rows.Add(dataRow1);
                        }                    foreach (DataRow dataRow1 in ds1.Tables[0].Rows)//这里有问题.
                        {
                            DataRow dataRow2 = dataTable2.NewRow();
                            dataRow2["TestID"] = testid;
                            dataRow2["ChoiceNumber"] = dataRow1[1];
                            dataRow2["Label"] = dataRow1[2];
                            dataRow2["Description"] = dataRow1[3];
                            dataTable2.Rows.Add(dataRow2);
                        }
                     //   sqlDA2.InsertCommand.Transaction = tran;
                      //  sqlDA1.InsertCommand.Transaction = tran;
                        sqlDA1.Update(dataTable1);
                        sqlDA2.Update(dataTable2);
                   } 
            catch (Exception ex)
                    {
                      //  tran.Rollback();
                        Logger.Error("", ex);
                        throw ex;
                    }
                    finally
                    {
                        conn.Close();
                    }            }
                else
                {
                    Label1.Text = "<script language=javascript>alert('TestID not match.');</script>";
                }
            
             }
    我写的这段到是可以把数据传到数据库里,可是将SHEET1的数据上上传到了2张表里.而sheet2的数据没拿到.
      

  2.   

    何不把sheet分开两个文件?在程序里边好做,手工操作没弄过
      

  3.   

    不能分开,要求点一个button就将数据上传.
      

  4.   

                    return   ds; 
                    return   ds1; 你写了两个return,ds1当然没有办法返回咯 - -#
      

  5.   

    再说也没有必要开两个dataset是不?一个ds中可以存多张表啊。
      

  6.   

    可以写成oleDa.Fill(ds, "[Sheet2$] "); 
      

  7.   

    同意SHPTGL1982  
    子程序内 能返回两个return吗 这个程序也不应该是这样编的 .....