Click here to Skip to main content
15,896,512 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Can anyone tell me what is the wrong in my code
Error message is "Source and destination tables column mismatch" (SQL bulkcopy insert)
//=========================================================
my sql Table name is :dl_Temp_Investigation<br />
Columns are : <br />
GroupId<br />
TestCode<br />
TestName<br />
GroupName<br />
Charge<br />
Discount<br />
testno<br />
<br />
my Datatable name is: dt<br />
column are :<br />
GroupId<br />
TestCode<br />
TestName<br />
Group<br />
Charge<br />
Discount<br />
testno

//==============================================================
my code is as follows
//========================================
C#
public int InsertInvestigation(DataTable dt)
    {
        int retVal = 0;
        string connectionString = System.Configuration.ConfigurationSettings.AppSettings["epracticedb_connectstring"];
        SqlConnection sqlConn = null;
        SqlCommand sqlCommand = null;
       
            sqlConn = new SqlConnection(connectionString);
            sqlConn.Open();
            SqlTransaction lTransaction = sqlConn.BeginTransaction();
            string aa = dt.Columns[6].ToString();
            try
            {
                int rowcount = dt.Rows.Count;               
                using (SqlBulkCopy bcopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.Default, lTransaction))
                {
                    bcopy.DestinationTableName = "dl_investigationFinal"; // the table to which data is to be written
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[6].ToString(), "testno"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[0].ToString(), "GroupId"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[1].ToString(), "TestCode"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[2].ToString(), "TestName"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[3].ToString(), "GroupName"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[4].ToString(), "Charge"));
                    bcopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(dt.Columns[5].ToString(), "Discount"));
                    bcopy.BatchSize = rowcount; // records to be written in one batch
                    bcopy.NotifyAfter = 200; // in number of records
                    bcopy.WriteToServer(dt);
                }
                    lTransaction.Commit();
                    retVal = 1;
            }
            catch (Exception e)
            {
                lTransaction.Rollback();
                throw;
                retVal = 0;
            }
            finally
            {
                if (sqlCommand != null) sqlCommand.Dispose();
                if (sqlConn != null)
                {
                    if (sqlConn.State == ConnectionState.Open) sqlConn.Close();
                    sqlConn.Dispose();
                }
            }
            return retVal;
    }


[edit]Code block added - OriginalGriff[/edit]
Posted
Updated 29-Jul-11 22:53pm
v3

1 solution

Make sure the column types (varchar, int etc) in the two tables are the same as well.
 
Share this answer
 
Comments
SHAJANCHERIAN 1-Aug-11 1:11am    
Thank u Abhinav,
There was a datatype mismatch..

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900