简体   繁体   中英

Unable to compare the columns in SqlBulkCopy

Here is my code:

 protected void Button1_Click(object sender, EventArgs e)
 {
    string strFileType = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();
    string strFileName = FileUpload1.PostedFile.FileName.ToString();

    FileUpload1.SaveAs(Server.MapPath("~/Import/" + strFileName + strFileType));
    string strNewPath = Server.MapPath("~/Import/" + strFileName + strFileType);

    string excelConnectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="+strNewPath +"; Extended Properties=Excel 8.0;");

    //string excelConnectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\myFolder\\Book1.xls;" + "Extended Properties=Excel 8.0;"); 

   // Create Connection to Excel Workbook
   using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
   {
       OleDbCommand command = new OleDbCommand("Select ID,Data FROM [Sheet1$]", connection);

       connection.Open();

       // Create DbDataReader to Data Worksheet
       using (DbDataReader dr = command.ExecuteReader())
       {
          // SQL Server Connection String
          string sqlConnectionString = "Data Source=DITSEC3;Initial Catalog=test;Integrated Security=True";

          con.Open();
          DataTable dt1 = new DataTable();
          string s = "select count(*) from ExcelTable"; 
          string r = ""; 
          SqlCommand cmd1 = new SqlCommand(s, con);

          try 
          { 
              SqlDataAdapter da1 = new SqlDataAdapter(cmd1); 
              da1.Fill(dt1);
          }
          catch { } 

          int RecordCount; 
          RecordCount = Convert.ToInt32(cmd1.ExecuteScalar());

          r = RecordCount.ToString(); 
          Label1.Text = r;
          con.Close();
          int prv = Convert.ToInt32(r);

          //matching columns
          //SqlBulkCopyColumnMapping mapping1 = new SqlBulkCopyColumnMapping("id", "ida");
          //SqlBulkCopyColumnMapping mapping2 = new SqlBulkCopyColumnMapping("data", "dataa");

          // Bulk Copy to SQL Server
          using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
          {
              bulkCopy.DestinationTableName = "ExcelTable";
              bulkCopy.WriteToServer(dr);
          }

          con.Open();
          DataTable dt = new DataTable(); 
          s = "select count(*) from ExcelTable";  r = ""; 

          SqlCommand cmd = new SqlCommand(s, con); 

          try 
          { 
               SqlDataAdapter da = new SqlDataAdapter(cmd);
               da.Fill(dt); 
          }
          catch { } 

          RecordCount = Convert.ToInt32(cmd.ExecuteScalar()); 
          r = RecordCount.ToString(); Label1.Text = r;

          con.Close();

          int ltr = Convert.ToInt32(r);
          if (prv == ltr)
          {
             Label1.Text = "No records Added";
          }
          else
          {
             Label1.Text = "Records Added Successfully !";
          }
       }
    }

I know I need to add something like:

 SqlBulkCopyColumnMapping mapping1 = new SqlBulkCopyColumnMapping("id", "ida");
 SqlBulkCopyColumnMapping mapping2 = new SqlBulkCopyColumnMapping("data", "dataa");

but I am not sure where I am supposed to add it in the above code

The column mappings are to be added to the bulkCopy.ColumnsMappings collection:

var mapping1 = new SqlBulkCopyColumnMapping("id", "ida");
bulkCopy.ColumnMappings.Add(mapping1);

You do the mapping before you execute the WriteToServer call.

The MSDN documentation of SqlBulkCopyColumnMapping has further documentation and an example.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM