2017-12-08 2 views
0

아래 코드에서 Sent_date 열을 포함하는 Excel 파일에서 데이터를 가져오고 MM/DD/YYYY 형식으로 데이터를 가져옵니다. 각 데이터 행은 반복되고 sent_date날짜 값ex_date 변수에 저장됩니다. Excel 파일에서 데이터 가져 오기

 protected void btnUpload_Click(object sender, EventArgs e) 
    { 

     MySqlTransaction transaction; 

     string ex_id = ""; 
     var count = 0; 



     string file_name = Path.GetFileName(FileUpload1.FileName); 
     string Excel_path = Server.MapPath("~/Excel/" + file_name); 
     FileUpload1.SaveAs(Excel_path); 

     using (OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Excel_path + ";Extended Properties=Excel 8.0;Persist Security Info=False")) 
     { 
      my_con.Open(); 

      // get the excel file data and assign it in OleDbcoomad object(o_cmd) 
      using (OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", my_con)) 
      { 

       // read the excel file data and assing it o_dr object 
       using (OleDbDataReader dr = command.ExecuteReader()) 
       { 

        ///////////////////////////////////////////// 
        // while (dr.Read() && count++ < 10) 
        while(dr.Read()) 
        { 
         //get first row data and assign it ex_id variable 
         ex_id = dr[0].ToString(); 
         string ex_uid = dr[1].ToString(); 
         //get second row data and assign it ex_name variable 
         string ex_date = dr[2].ToString(); 
         //get thirdt row data and assign it ex_name variable 

         string ex_dir = dr[3].ToString(); 

         //get first row data and assign it ex_location variable 
         string ex_email = dr[4].ToString(); 
         string ex_email1 = dr[5].ToString(); 
         string ex_email2 = dr[6].ToString(); 
         //string ex_company = dr[7].ToString(); 
         string ex_company = dr[7].ToString(); 
         string ex_contact = dr[8].ToString(); 
         string ex_proposal = dr[9].ToString(); 
         string ex_reason = dr[10].ToString(); 
         //string ex_type = dr[11].ToString(); 

         int chk = 0; 
         int type = 0; 
         int dup = 0; 
         int dir = 0; 

         if (ddlwebsites.SelectedIndex != 0) 
         { 
          dir = Convert.ToInt32(ddlwebsites.SelectedValue); 
          if (dir == 8) 
          { 
           type = 1; 
          } 

         } 


         foreach (ListItem lstAssign in ddlevents.Items) 
         { 
          if (lstAssign.Selected == true) 
          { 
           chk = 1; 
          } 
         } 

         if (type == 1 && chk == 0) 
         { 
          evyerror.Text = "Please Select the Event!!"; 
          return; 

         } 

         else 
         { 
          string querycomp = "", compID = ""; 
          querycomp = "Select * from barter_company where website like '%' '" + ex_dir + "' '%'"; 
          string connStr = ConfigurationManager.ConnectionStrings["BarterConnectionString"].ToString(); 
          connect = new MySqlConnection(connStr); 
          connect.Open(); 
          transaction = connect.BeginTransaction(); 
          try 
          { 
           ClassDtBaseConnect clsDtResult = new ClassDtBaseConnect(); 
           DataTable dt = clsDtResult.GetDataTable(querycomp); 
           if (dt.Rows.Count > 0) 
           { 
            compID = dt.Rows[0]["comp_id"].ToString(); 
            ViewState["comp_id"] = compID; 
            if (type == 1) 
            { 
             dup = checkforDuplicates(Convert.ToInt32(compID)); 
             if (dup == 1) 
             { 
              //Confirm_MP.Show(); 
              // ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "confirmation();", true); 
             } 

            } 
            //return; 
           } 
           else 
           { 

            string queryStr = "insert into barter_company (comp_name,website) values(?comp,?website)"; 
            MySqlCommand cmd = new MySqlCommand(queryStr, connect, transaction); 
            cmd.Parameters.AddWithValue("?comp", ex_company); 
            cmd.Parameters.AddWithValue("?website", ex_dir); 
            cmd.ExecuteNonQuery(); 
            cmd.CommandText = "Select LAST_INSERT_ID()"; 
            compID = cmd.ExecuteScalar().ToString(); 
            transaction.Commit(); 
            connect.Close(); 

           } 
          } 
          catch 
          { 
           transaction.Rollback(); 
          } 





          if (dup == 0) 
          { 
           // create a connection string with your sql database 
           string connStr1 = ConfigurationManager.ConnectionStrings["BarterConnectionString"].ToString(); 
           connect = new MySqlConnection(connStr1); 
           connect.Open(); 

           DateTime date = new DateTime();//added by chetan 
           ex_date = ex_date.Split(' ')[0];//added by chetan 
           date = DateTime.ParseExact(ex_date, "MM/dd/yyyy", null);//added by chetan 
           string SentDateString = date.ToString("yyyy/MM/dd");//added by chetan 
           DateTime SentDate = Convert.ToDateTime(SentDateString).Date;//added by chetan 
                          //DateTime SentDate = DateTime.Parse(ex_date);//added by chetan 


           // } 
           //date = DateTime.ParseExact(ex_date, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);//added by chetan 
           //date = DateTime.ParseExact(ex_date, "MM/dd/yyyy", null); 
           // string SentDateString = date.ToString("yyyy/MM/dd"); 
           transaction = connect.BeginTransaction(); 
           try 
           { 

            ex_uid = Session["session_barterUser_id"].ToString(); 


            MySqlCommand cmd = new MySqlCommand("insert into barter_proposals(user_id, sent_date, website_a, email_id, email_id2, email_id3, company, contact_name, proposal_status, reason,type) values(?uid,?sentdate,?dir,?email,?email2,?email3,?comp,?cont_name,?pro_status,?reason,?type)", connect); 

            cmd.Parameters.AddWithValue("?uid", ex_uid); 
            cmd.Parameters.AddWithValue("?comp", compID); 

            cmd.Parameters.AddWithValue("?sentdate", SentDate); 
            // command.Parameters.AddWithValue("?event", eventname); 
            cmd.Parameters.AddWithValue("?dir", dir); 
            // command.Parameters.AddWithValue("?bar_type", ddlbartertype.SelectedValue); 
            // command.Parameters.AddWithValue("?website_b", txtwebsite.Text); 
            //cmd.Parameters.AddWithValue("?comp", ex_company); 
            cmd.Parameters.AddWithValue("?cont_name", ex_contact); 
            cmd.Parameters.AddWithValue("?email", ex_email); 
            cmd.Parameters.AddWithValue("?email2", ex_email1); 
            cmd.Parameters.AddWithValue("?email3", ex_email2); 
            cmd.Parameters.AddWithValue("?pro_status", ex_proposal); 
            cmd.Parameters.AddWithValue("?reason", ex_reason); 
            cmd.Parameters.AddWithValue("?type", type); 
            // command.Parameters.AddWithValue("?type", type); 

            cmd.ExecuteNonQuery(); 
            if (type == 1) 
            { 

             cmd.CommandText = "Select LAST_INSERT_ID()"; 
             Int64 CurrentProId = Convert.ToInt64(cmd.ExecuteScalar()); 
             int eventAssignID; 
             string QueryInqEventAssign = "insert into barter_propeventassign(prop_id,event_id) values(?pro_id,?event_id)"; 

             foreach (ListItem lstAssign in ddlevents.Items) 
             { 
              if (lstAssign.Selected == true) 
              { 
               cmd = new MySqlCommand(QueryInqEventAssign, connect, transaction); 
               cmd.Parameters.AddWithValue("?pro_id", CurrentProId); 
               eventAssignID = Convert.ToInt32(lstAssign.Value); 
               cmd.Parameters.AddWithValue("?event_id", eventAssignID); 
               cmd.ExecuteNonQuery(); 

              } 
             } 

            }//end of if 
            transaction.Commit(); 
            connect.Close(); 
            Response.Write("<script type=\"text/javascript\">alert('Proposal Added Successfully!!!');</script>"); 
           }//end of try 
           catch (Exception ex) 
           { 
            transaction.Rollback(); 
            Response.Write("<script>alert('There is an Error Ocurred:" + Server.HtmlEncode(ex.Message) + "')</script>"); 
           } 
           finally 
           { 
            connect.Close(); 

           } 

          }//ifdupzero 
         }//else 
        }//while 


      //dr.Close();//commented by chetan 
     }//using 
    }//using 

    }//using 

     if (System.IO.File.Exists(Excel_path)) 
     { 
      System.IO.File.Delete(Excel_path); 
     } 


    } 

이제 문제는 엑셀 파일 3 개 행이 포함되어있는 경우 아래로 그 가정입니다 :
sent_date 
11/21/2017----1strow 
11/22/2017----2ndrow 
11/23/2017----3rdrow 

Reader

는 3 개 행을 읽을 않지만 그러나 그 후 멈추지 않습니다. 다시 while 루프로 이동하여 날짜 (실제 값 : "")를 읽고 오류 "string is not recognised as datetime"을 제공합니다.

이상한 점은 16 행을 가져 오는 동안 오류가 발생하지 않는다는 것입니다. 리더가 멈추고 데이터가 삽입됩니다. 왜 그걸 막기 위해 16 줄이 걸릴지 모르겠다. reader

3 행을 읽은 후 판독기를 멈추게하려면 코드에 무엇을 추가해야합니까? 3 행을 읽은 후 어떻게해야합니까? dr.close()은 어떻게됩니까?

+1

요점 그것이 연결을 정리한다는 것입니다. 명시 적으로'Close'를 호출하지 마십시오. 오, 적절한 C# 명명 규칙을 사용하십시오. –

+0

3 행 후 중지하는 방법? 'var count = 0; while (dr.Read() && count ++ <3) {}' –

+0

10 개의 행이있는 경우 실제로는 Excel 파일의 행 수에 따라 가져와야합니다 ... –

답변

0

Excel 파일을 읽는 동안 빈/사용 된 행의 개념을 고려해야합니다. 3 행 이후에 Excel에서 행을 삭제하고 다시 가져 오는 경우 문제가 발생하지 않습니다.

귀하의 설명에 따르면 Excel은 총 16 개의 사용 된 행이 있지만 데이터는 3 개의 행으로 채워집니다. 같은 조건이 곳 루프 3 데이터 행 후, 더 철저한 입력해야합니다 동안

가 나올 "SELECT * FROM [Sheet1의 $] WHERE [F1] <> '' '사용'의

관련 문제