The following method copies data from Informix db to SQL Server db and it's so slow, I want to refactor it so it could be more readable and faster:
public static int copyEmpData(DataTable employeeDT, DateTime from_date, DateTime to_date, string con)
{
string db_con = con;
if (con != "1")
con = "1";
if (string.IsNullOrEmpty(con))
{
con = "1";
}
int month_from = from_date.Month;
int month_to = to_date.Month;
int yr_from = from_date.Year;
int yr_to = to_date.Year;
int result;
//int Ldayfrom= DateTime.DaysInMonth(yr_from,month_from);
int Ldayto = DateTime.DaysInMonth(yr_to, month_to);
string fromdate = from_date.Month + "-01-" + from_date.Year;
string todate = to_date.Month + "-" + Ldayto + "-" + to_date.Year;
string separator;
string emplyeeRange = "";
foreach (DataRow row in employeeDT.Rows)
{
if (row[0].ToString().Trim() == employeeDT.Rows[employeeDT.Rows.Count - 1][0].ToString().Trim())//point to last index
separator = "";
else
separator = ", ";
emplyeeRange += row[0] + separator;
}
//1- select data from informix
//---------------------------------------------------------------------------
DBConnection ifx_conn = new DBConnection(con, false);
// DBConnection ifdoc_conn = new DBConnection("5", false);
Dictionary<string, string> paramList1 = new Dictionary<string, string>();
paramList1.Add("from_date", from_date.ToShortDateString());
paramList1.Add("to_date", to_date.ToShortDateString());
string cmdText = "select * from KLpermission where emp_num in( " + emplyeeRange + " ) and perm_date>=? and perm_date <=?"; //"select * from KLpermission where emp_num = ? and month(perm_daet)=?";
DataTable permissionDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from KLholid where emp_num in( " + emplyeeRange + " ) and end_date>=? and start_date<=? ";//"select * from KLholid where emp_num = ? and month(start_date)=? and month(end_date)=?";
DataTable vacationDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from KLempmission where emp_num in( " + emplyeeRange + " ) and date(to_date)>=? and date(from_date)<=? ";
DataTable missionDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from KLholsp where emp_num in( " + emplyeeRange + " ) and end_date>=? and start_date<=? ";//"select * from KLholsp where emp_num = ? and month(start_date)=? and month(end_date)=?";
DataTable holspDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from KLvacationadds where emp_num in(" + emplyeeRange + " ) and vacation_date>=? and vacation_date <=?"; //"select * from KLpermission where emp_num = ? and month(perm_daet)=?";
DataTable vacationadds = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select distinct * from KLreqovertime where month(req_date)= " + from_date.Month + " and year(req_date)=" + from_date.Year +
" and emp_num in (" + emplyeeRange + ")";
DataTable KLreqovertime = ifx_conn.Return_DataTable(cmdText);
cmdText = "select * from KLjobinfo where emp_num in ( " + emplyeeRange + ") and month(job_date)=" + from_date.Month + " and year(job_date)=" + from_date.Year;
DataTable KLjobinfo = ifx_conn.Return_DataTable(cmdText);
cmdText = "select * from KLempjobtitle where emp_num in ( " + emplyeeRange + ")";
DataTable KLempjobtitle = ifx_conn.Return_DataTable(cmdText);
//Get Employees' Data
//=============================
DataTable empData = new DataTable();
empData.Columns.Add("BADGENUMBER", typeof(string));
empData.Columns.Add("NAME", typeof(string));
empData.Columns.Add("dep_code", typeof(int));
empData.Columns.Add("dep_year", typeof(int));
empData.Columns.Add("camp_code", typeof(int));
for (int i = 0; i < employeeDT.Rows.Count; i++)
{
empData.Merge(GetEmployeeData(Convert.ToInt32(employeeDT.Rows[i][0]), db_con));
}
//2- copy data to sql
//---------------------------------------------------------------------------
if (con != "1")
{
DBConnection ifx_conn2 = new DBConnection("1", false);
string map_num = ifx_conn2.Return_Scalar("select map_value from hp0empnum_map where db_code=" + con);
if (!string.IsNullOrEmpty(map_num))
{
emplyeeRange = "";
foreach (DataRow row in employeeDT.Rows)
{
if (row[0].ToString().Trim() == employeeDT.Rows[employeeDT.Rows.Count - 1][0].ToString().Trim())//point to last index
separator = "";
else
separator = ", ";
emplyeeRange += (int.Parse(map_num) + int.Parse(row[0].ToString())) + separator;
}
}
for (int z = 0; z < empData.Rows.Count; z++)
{
empData.Rows[z]["BADGENUMBER"] = (int.Parse(map_num) + int.Parse(empData.Rows[z]["BADGENUMBER"].ToString()));
}
for (int z = 0; z < permissionDT.Rows.Count; z++)
{
permissionDT.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(permissionDT.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < vacationDT.Rows.Count; z++)
{
vacationDT.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(vacationDT.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < missionDT.Rows.Count; z++)
{
missionDT.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(missionDT.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < holspDT.Rows.Count; z++)
{
holspDT.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(holspDT.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < vacationadds.Rows.Count; z++)
{
vacationadds.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(vacationadds.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < KLreqovertime.Rows.Count; z++)
{
KLreqovertime.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(KLreqovertime.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z < KLjobinfo.Rows.Count; z++)
{
KLjobinfo.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(KLjobinfo.Rows[z]["emp_num"].ToString()));
}
for (int z = 0; z > KLempjobtitle.Rows.Count; z++)
{
KLempjobtitle.Rows[z]["emp_num"] = (int.Parse(map_num) + int.Parse(KLempjobtitle.Rows[z]["emp_num"].ToString()));
}
}
SqlConnection sql_connection = new SqlConnection(ConfigurationManager.ConnectionStrings["sql2"].ToString());
sql_connection.Open();
SqlTransaction sql_current_trans = sql_connection.BeginTransaction();
SqlCommand sql_command = sql_connection.CreateCommand();
sql_command.Transaction = sql_current_trans;
SqlParameter sql_param;
//2-1- delete old data
//--------------------
cmdText = "delete from KLpermission where emp_num in( " + emplyeeRange + " ) and perm_date>=@from_date and perm_date <=@to_date";
sql_command.CommandType = CommandType.Text;
sql_command.Parameters.AddWithValue("@from_date", from_date.ToShortDateString());
sql_command.Parameters.AddWithValue("@to_date", to_date.ToShortDateString());
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();//sql_conn.Execute_NonQueryWithTransaction(cmdText, CommandType.Text, paramList1);
if (result >= 0)
{
cmdText = "delete from KLholid where emp_num in( " + emplyeeRange + " ) and end_date>=@from_date and start_date<=@to_date ";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();//result = sql_conn.Execute_NonQueryWithTransaction(cmdText, CommandType.Text, paramList1);
if (result >= 0)
{
cmdText = "delete from KLempmission where emp_num in( " + emplyeeRange + " ) and to_date>=@from_date and from_date<=@to_date";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();//sql_conn.Execute_NonQueryWithTransaction(cmdText, CommandType.Text, paramList1);
if (result >= 0)
{
cmdText = "delete from KLholsp where emp_num in( " + emplyeeRange + " ) and end_date>=@from_date and start_date<=@to_date";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "delete from KLvacationadds where emp_num in( " + emplyeeRange + " ) and vacation_date>=@from_date and vacation_date<=@to_date";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "delete from KLreqovertime where emp_num in( " + emplyeeRange + " )and month(req_date)= " + from_date.Month + " and year(req_date)=" + from_date.Year;
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "Delete from KLjobinfo where emp_num in ( " + emplyeeRange + ") and month(job_date)=" + from_date.Month + " and year(job_date)=" + from_date.Year;
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "Delete from KLempjobtitle where emp_num in ( " + emplyeeRange + ")";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
//2-2- insert new data
//--------------------
cmdText = "insert into KLpermission select * from @permissionDT ";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@permissionDT", permissionDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3permissionType";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into KLholid select * from @vacationDT";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@vacationDT", vacationDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3holidType";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into KLempmission select * from @missionDT";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@missionDT", missionDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3empmissionType";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into KLholsp select * from @holspDT";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@holspDT", holspDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3holspType";
result = sql_command.ExecuteNonQuery();//sql_conn.Execute_NonQueryWithTransaction(cmdText, CommandType.Text, paramList1);
if (vacationadds != null && vacationadds.Rows.Count > 0)
{
vacationadds.Columns[1].DataType = typeof(DateTime);
for (int y = 0; y < vacationadds.Rows.Count; y++)
{
vacationadds.Rows[y][4] = DateTime.Parse(vacationadds.Rows[y][4].ToString()).ToShortTimeString();
}
}
vacationadds.AcceptChanges();
if (result >= 0)
{
cmdText = "insert into KLvacationadds select * from @vacationadds";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@vacationadds", vacationadds);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3vacationadds";
result = sql_command.ExecuteNonQuery();//sql_conn.Execute_NonQueryWithTransaction(cmdText, CommandType.Text, paramList1);
if (result >= 0)
{
cmdText = "insert into KLreqovertime select * from @KLreqovertime";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@KLreqovertime", KLreqovertime);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp3reqovertime";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into KLjobinfo select * from @KLjobinfo";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@KLjobinfo", KLjobinfo);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp2jobinfo";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into KLempjobtitle select * from @KLempjobtitle";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@KLempjobtitle", KLempjobtitle);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.hp2empjobtitle";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
//2-3- Update Employees Data
//---------------------------
cmdText = "UPDATE USRRD " +
" SET " +
" USRRD.NAME = b.NAME, " +
" USRRD.dep_year = b.dep_year , " +
" USRRD.camp_code = b.camp_code, " +
" USRRD.dep_code = b.dep_code , " +
" USRRD.DEFAULTDEPTID = b.dep_code + 1 " +
" FROM " +
" USRRD" +
" INNER JOIN " +
" @USRRD b " +
" ON " +
" USRRD.BADGENUMBER = b.BADGENUMBER " +
" WHERE " +
" USRRD.BADGENUMBER in (" + emplyeeRange + ")";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@USRRD", empData);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.UserInfoType2";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
int M_fromDate = from_date.Month;
int M_todate = to_date.Month;
SQLDBConnection db_connection = new SQLDBConnection("sql2", false);
cmdText = "select count(*) from KLvacationadds where emp_num in( " + emplyeeRange + " ) and month(vacation_date)=" + M_fromDate + " and month(vacation_date)=" + M_todate + " and DB_flag='SQL'";
DataTable KLvacationadds = db_connection.Return_DataTable(cmdText);
if (hp3vacationadds.Rows.Count > 0)
{
cmdText = "delete KLvacationadds where emp_num in(" + emplyeeRange + " ) and month(vacation_date)=" + M_fromDate + " and month(vacation_date)=" + M_todate + " and DB_flag='SQL'";
int k = ifx_conn.Execute_NonQuery(cmdText);
cmdText = "insert into KLvacationadds select * from @KLvacationadds";
int z = ifx_conn.Execute_NonQuery(cmdText);
}
sql_current_trans.Commit();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
}
}
}
}
}
}
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
}
else
{
//roll back
sql_current_trans.Rollback();
if (sql_connection.State == ConnectionState.Open)
{
sql_connection.Close();
}
}
if (result >= 0)
{
return 1;
}
else
{
return -1;
}
}