2017-12-05 15 views
1

にexcelsheetファイルからデータをインポートする:は、私は次のコード行を持っているMySQLデータベースのC#

 protected void btnUpload_Click(object sender, EventArgs e) 
{ 

     MySqlTransaction transaction; 

     string ex_id = ""; 



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

     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(); 
    OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", my_con); 
     da.Fill(dtExceldata); 
    if (dtExceldata.Rows.Count > 0)    
    { 
     //foreach (DataRow row in dtExceldata.Rows) 
      for (int i = 0; i <= dtExceldata.Rows.Count - 1; i++) 

     { 

       string ex_dir = dtExceldata.Rows[i]["website_a"].ToString(); 
       //string ex_dir = row["website_a"].ToString(); 


       string ex_email = dtExceldata.Rows[i]["email_id"].ToString(); 
       // string ex_email = row["email_id"].ToString(); 


       string ex_email1 = dtExceldata.Rows[i]["email_id2"].ToString(); 
       //string ex_email1 = row["email_id2"].ToString(); 


       string ex_email2 = dtExceldata.Rows[i]["email_id3"].ToString(); 
       //string ex_email2 = row["email_id3"].ToString(); 


       string ex_company = dtExceldata.Rows[i]["company"].ToString(); 
       //string ex_company = row["company"].ToString(); 

       string ex_contact = dtExceldata.Rows[i]["contact_name"].ToString(); 
       //string ex_contact = row["contact_name"].ToString(); 


       string ex_proposal = dtExceldata.Rows[i]["proposal_status"].ToString(); 
       // string ex_proposal = row["proposal_status"].ToString(); 


       string ex_reason = dtExceldata.Rows[i]["reason"].ToString(); 
       //string ex_reason = row["reason"].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(); 
        date = DateTime.ParseExact(txtsentdate.Text, "MM/dd/yyyy", null); 
        string SentDateString = date.ToString("yyyy/MM/dd"); 
        //DateTime date = new DateTime(); 
        //if (!string.IsNullOrEmpty(ex_date)) 
        // { 
        //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 date = 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 
        { 

         string 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", SentDateString); 
         // 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 
     }//for//foreach 
     }//while //if 


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

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





} 

は、インポートしようとしexcelsheet file.Whenで2つのエントリがあると仮定し、それはそれらの2行のエントリを挿入していますしかし、問題は、読者はその実行を停止しないことです。2行のエントリを読み取った後、それはblank.iを使用している3行目を読んでいるdr.closeを使用して、ブランク。

+0

が重複する可能性のような行にnull値をチェックすることにより、ブランク値をスキップすることができます(HTTPS [私はのOleDBでExcelファイルに空の行をかわすことができますどのように?]:/ /stackoverflow.com/questions/17149948/how-can-i-dodge-empty-rows-in-an-excel-file-with-oledb) – PaulF

+0

も参照してください:https://forums.asp.net/t/2029054 .aspx?+ OleDb +読み込み+ Excel +から+ Skip +すべて+空+行+ – PaulF

答えて

1

ループ条件として残っている行(dr.Read())がないかどうかを調べる代わりに、行の最初のセルが空白(dr [0] .ToString()!= String.Empty )

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

      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();   
      OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", my_con);   
      OleDbDataReader dr = command.ExecuteReader(); 
      dr.Read();    
      while (dr[0].ToString() != String.Empty) 
      { 
      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(); 
       ............... 
       //Insert operation 
       ............... 
      dr.Read(); 
      } 
      dr.close(); 
      my_con.close(); 

もちろん、残りの行が空白でない場合、最初の列は常に入力されます。 そうでない場合は、ループ状態の他の列もチェックすることができます。

+0

私はあなたの答えを試してみましたが、それはwhileループの中だけではありません.... – chetan

+0

私は午前Excelファイルからデータを読み取っています.... 1行目にはUid Name Emailid Contactname ........ 2行目に1 rahul [email protected] Raunak .......... 3のような詳細が含まれています行には2つのvishal [email protected] vishが含まれています......この2行目と3行目を読み取ってデータベースに挿入しましたが、問題は停止していません...空白の4行目..と私はuidのためにセッションを使用しています... uidの値をデータベースとその他の空白に保存します – chetan

+0

Excelのファイルにはすべての行に記されている列がありますか? – Maurice

1

そこにあなたがデータテーブルへのExcelデータを読み込むことができ ことをやってのさまざまな方法があり、その後、あなたがこの

string file_name = Path.GetFileName(FileUpload1.FileName); 
    string Excel_path = Server.MapPath("~/Excel/" + file_name); 
    DataTable dtExceldata = new DataTable(); 
    FileUpload1.SaveAs(Excel_path); 
    OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Excel_path + ";Extended 

Properties=Excel 8.0;Persist Security Info=False"); 
     OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", my_con); 
     da.Fill(dtExceldata); 
     if(dtExceldata.Rows.Count>0) 
     { 
      for (int i = 0; i <= dtExceldata.Rows.Count - 1; i++) 
      { 
       //assign value to variable 
       //like below 
       //string ex_uid = dtExceldata.Rows[i]["columnName"]; 
       //then insert operation here 

      } 
    } 
+0

@Ankit ... 2行あります...データベースに2行を挿入しています...実行は停止していません...あなたのケースでは++がそこにあります... 2 + 1は3です私のExcelファイルに3行目がありません...それは空白として読み取っている..私は2行をExcelのファイルを持っている場合は2行を読み取る必要があります – chetan

+0

空白の3行目を読み取らないように2行を読み取った後に接続を閉じる方法はありますか? – chetan

+0

このループは、データテーブルの行数だけ繰り返され、実際にはこれを実際に試してみましたが、行数(たとえば2回)でループしますが、2行入力して5行入力した場合、いくつかのブランク値 – Ankit

0

ようperticular列名を持つ行ごとのループのために、このExcelのファイルを見ることができます enter image description here

とc#のデータテーブル enter image description here

このループはデータテーブルの行数だけ繰り返されますこれを試して、それは行(例えば2回)の数だけループするが、私はバグを発見した場合は、2行を入力して5つの空白の行を次にいくつかのデータは、 attechment に示すように、ブランク値は、また、あなたは、この

for (int i = 0; i <= dtExceldata.Rows.Count - 1; i++) 
      { 
       if (!String.IsNullOrEmpty(Convert.ToString(dtExceldata.Rows[i]["fieldvalues"]))) 
       { 
        //assign value to variable 
        //like below 
        //string ex_uid = dtExceldata.Rows[i]["columnName"]; 
        //then insert operation here 
       } 
      } 
+0

iはExcelで他の値が – chetan

+0

を提出しないがあるが確認される可能性がありますExcelがファイルをチェックし、それは私がdbテーブルで、以下のような出力取得していますあなたのデータテーブル内のブランク値を与える: UID website_a EMAIL_ID emailid_2 email_id3会社を 1 abd 2 xyz 3空白空白空白 最初の2行は正常です...それはExcelから2行だけ挿入する必要がありますが、3番目の4番目の行を挿入して挿入しますに。 – chetan

+0

@Ankit ...私はコードを編集しました。.....私はインポートデータの完全なコードを追加しました。 – chetan

関連する問題