using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using System.Data.Odbc;
namespace QZMDB.Function
{
/// <summary>
/// Excel文件的读取
/// </summary>
public class ExcelLoadFunction
{
public static string ConStr = Properties.Settings.Default.QZMDBConnectionString;
DataSet ds = new DataSet();
/// <summary>
/// 读取Excel
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public int LoadExcel(string fileName)
{
// return BlacklistQuChong(fileName); ////如果需要对黑名单进行去重处理则放行此代码段.注掉"ds-return0;"之间代码段
ds = CSV_Getds(fileName);
if (ds.Tables[0].Rows.Count != 0)
{
try
{
using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))
{
sbc.DestinationTableName = "tbBlackList";//对应的数据库表名
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("黑名单号码", "mobile");//关联ds.tables[0]中的列和数据库中的列明
sbc.BatchSize = 1000; //设置每次放入条数
sbc.WriteToServer(ds.Tables[0]);
}
return ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return 0;
}
}
return 0;
}
/// <summary>
/// 黑名单导入(带去重处理)
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
private int BlacklistQuChong(string fileName)
{
try
{
SqlConnection sConn = new SqlConnection(ConStr);
string[] name = GetTablesFromOleDb(fileName);
string a = name[0].Replace("'", "");
string OLEDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + fileName;
sConn.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);
DataTable sourceDataTable = new DataTable();
oda.Fill(sourceDataTable);
oda.Dispose();
int result = 0;
foreach (DataRow item in sourceDataTable.Rows)
{
string ids = Convert.ToString(item["黑名单号码"]);
if (delete(ids))
{
string sql = "insert into tbBlackList values(@mobile)";
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@mobile",ids),
};
result += SqlHelper.SqlHelper.ExecuteNonQuery(sConn, System.Data.CommandType.Text, sql, param);
}
}
sConn.Close();
return result;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
public static string[] GetTablesFromOleDb(string path)
{
string[] result = null;
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + path;
OleDbConnection conn = null;
DataTable tblSchema = null;
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
try
{
conn.Open();
tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
result = new string[tblSchema.Rows.Count];
for (int i = 0; i < tblSchema.Rows.Count; i++)
{
result[i] = tblSchema.Rows[i][2].ToString();
}
}
catch (Exception)
{
return null;
}
finally
{
// 关闭连接
conn.Close();
}
return result;
}
/*
* 此处代码段进行了修改
* 原有:先判断是否存在数据行有删除后添加
* 更改:如果有重复的数据行则保持不执行添加操作
* 时间:20110711
* 备注;详情参见注掉的代码片段
* 修改人:Roni
* **/
private bool delete(string ids)
{
SqlConnection sConn = new SqlConnection(ConStr);
string select = "select * from tbBlackList where mobile='" + ids + "'";
using (SqlDataReader reader = SqlHelper.SqlHelper.ExecuteReader(ConStr, CommandType.Text, select, null))
{
if (reader.HasRows)
{
//string s = "delete from tbBlackList where mobile='" + ids + "'";
//SqlHelper.SqlHelper.ExecuteNonQuery(sConn, System.Data.CommandType.Text, s, null);
return false;
}
}
sConn.Close();
return true;
}
internal static bool CreateExcelByCondition(string filePath, string ExcelName)
{
throw new NotImplementedException();
}
/// <summary>
/// 查找手机号码是否重复
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
private bool deleteByMobile(string ids)
{
SqlConnection sConn = new SqlConnection(ConStr);
string select = "select * from tbDialResultHis where mobile='" + ids + "'";
using (SqlDataReader reader = SqlHelper.SqlHelper.ExecuteReader(ConStr, CommandType.Text, select, null))
{
if (reader.HasRows)
{
return false;
}
}
sConn.Close();
return true;
}
/// <summary>
/// Excel
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public int LoadExcelByFileName(string fileName, int projectId, int productID, string rev_file_name, string input_date)
{
ds = CSV_Getds(fileName);
if (ds.Tables[0].Rows.Count != 0)
{
try
{
if (!ds.Tables[0].Columns.Contains("项目编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建
}
if (!ds.Tables[0].Columns.Contains("产品编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));
}
if (!ds.Tables[0].Columns.Contains("导入时间"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));
}
if (!ds.Tables[0].Columns.Contains("导入文件名"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));
}
//if (!ds.Tables[0].Columns.Contains("手机1"))
//{
// ds.Tables[0].Columns.Add(new DataColumn("手机1", typeof(string)));
//}
string errmsg = "";
foreach (DataRow dr in ds.Tables[0].Rows)
{
dr["项目编号"] = projectId;
dr["产品编号"] = productID;
dr["导入时间"] = input_date;
dr["导入文件名"] = rev_file_name;
if (dr["手机"].ToString().Length > 11)
{
errmsg += dr["手机"].ToString()+" 手机长度超过11位\r\n";
}
}
if(errmsg.Length!=0)
{
MessageBox.Show(errmsg);
return 0;
}
using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))
{
sbc.DestinationTableName = "tbDialResultHis";//对应的数据库表名
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明
sbc.ColumnMappings.Add("产品编号", "product_id");
sbc.ColumnMappings.Add("导入时间", "input_dt");
sbc.ColumnMappings.Add("导入文件名", "rev_file_name");
sbc.ColumnMappings.Add("手机", "mobile");
sbc.ColumnMappings.Add("姓名", "name");
sbc.ColumnMappings.Add("性别", "sex");
sbc.ColumnMappings.Add("年龄", "age");
sbc.ColumnMappings.Add("营销是否成功", "marketing_result");
sbc.ColumnMappings.Add("已接通结果", "dial_result");
sbc.ColumnMappings.Add("备注", "dial_remark");
sbc.ColumnMappings.Add("电话经理", "dial_user");
sbc.BatchSize = 1000; //设置每次放入条数
sbc.WriteToServer(ds.Tables[0]);
}
return ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return 0;
}
}
return 0;
}
/// <summary>
/// 拨打清单导入
/// </summary>
/// <param name="fileName"></param>
/// <param name="projectId"></param>
/// <param name="productID"></param>
/// <param name="rev_file_name"></param>
/// <param name="input_date"></param>
/// <returns></returns>
public int LoadExcelByFileName_CallList(string fileName, int projectId, int productID, string rev_file_name, string input_date)
{
ds = CSV_Getds(fileName);
if (ds.Tables[0].Rows.Count != 0)
{
try
{
if (!ds.Tables[0].Columns.Contains("项目编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建
}
if (!ds.Tables[0].Columns.Contains("产品编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));
}
if (!ds.Tables[0].Columns.Contains("导入时间"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));
}
if (!ds.Tables[0].Columns.Contains("导入文件名"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));
}
foreach (DataRow dr in ds.Tables[0].Rows)
{
dr["项目编号"] = projectId;
dr["产品编号"] = productID;
dr["导入时间"] = input_date;
dr["导入文件名"] = rev_file_name;
}
using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))
{
sbc.DestinationTableName = "tbDialHis";//对应的数据库表名
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明
sbc.ColumnMappings.Add("产品编号", "product_id");
sbc.ColumnMappings.Add("导入时间", "input_dt");
//sbc.ColumnMappings.Add("导入文件名", "rev_file_name");
sbc.ColumnMappings.Add("被叫", "mobile");
sbc.ColumnMappings.Add("呼出时间", "dial_dt");
sbc.ColumnMappings.Add("通话时长(秒)", "dial_duration");
sbc.BatchSize = 1000; //设置每次放入条数
sbc.WriteToServer(ds.Tables[0]);
}
return ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return 0;
}
}
return 0;
}
/// <summary>
/// QC数据导入
/// </summary>
/// <param name="projectID"></param>
/// <param name="productID"></param>
/// <param name="filename"></param>
/// <param name="time"></param>
/// <returns></returns>
internal int LoadExcelByFileName_QCData(int projectID, int productID, string filename, string time)
{
ds = CSV_Getds(filename);
if (ds.Tables[0].Rows.Count != 0)
{
try
{
if (!ds.Tables[0].Columns.Contains("项目编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建
}
if (!ds.Tables[0].Columns.Contains("产品编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));
}
if (!ds.Tables[0].Columns.Contains("导入时间"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));
}
if (!ds.Tables[0].Columns.Contains("导入文件名"))
{
ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));
}
foreach (DataRow dr in ds.Tables[0].Rows)
{
dr["项目编号"] = projectID;
dr["产品编号"] = productID;
dr["导入时间"] = time;
dr["导入文件名"] = filename;
}
using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))
{
sbc.DestinationTableName = "tbQCHis";//对应的数据库表名
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明
sbc.ColumnMappings.Add("产品编号", "product_id");
sbc.ColumnMappings.Add("导入时间", "input_dt");
sbc.ColumnMappings.Add("导入文件名", "rev_file_name");
sbc.ColumnMappings.Add("用户号码", "mobile");
sbc.ColumnMappings.Add("开通时间", "qc_order_dt");
sbc.BatchSize = 1000; //设置每次放入条数
sbc.WriteToServer(ds.Tables[0]);
}
return ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return 0;
}
}
return 0;
}
/// <summary>
/// 电信反馈表
/// </summary>
/// <param name="FilePath"></param>
/// <param name="projectID"></param>
/// <param name="productID"></param>
/// <param name="input_date"></param>
/// <returns></returns>
public int LoadExcelByFileName_tbFeedBack(string FilePath, int projectID, int productID, string input_date)
{
ds = CSV_Getds(FilePath);
if (ds.Tables[0].Rows.Count != 0)
{
try
{
if (!ds.Tables[0].Columns.Contains("项目编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建
}
if (!ds.Tables[0].Columns.Contains("产品编号"))
{
ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));
}
if (!ds.Tables[0].Columns.Contains("电信反馈时间"))
{
ds.Tables[0].Columns.Add(new DataColumn("电信反馈时间", typeof(DateTime)));
}
if (!ds.Tables[0].Columns.Contains("文件导入日期"))
{
ds.Tables[0].Columns.Add(new DataColumn("文件导入日期", typeof(DateTime)));
}
foreach (DataRow dr in ds.Tables[0].Rows)
{
dr["项目编号"] = projectID;
dr["产品编号"] = productID;
dr["电信反馈时间"] = input_date;
dr["文件导入日期"] = input_date;
}
using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))
{
sbc.DestinationTableName = "tbFeedBack";//对应的数据库表名
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明
sbc.ColumnMappings.Add("产品编号", "product_id");
sbc.ColumnMappings.Add("电信反馈时间", "fb_dt");
sbc.ColumnMappings.Add("文件导入日期", "input_dt");
sbc.ColumnMappings.Add("手机号码", "mobile");
sbc.ColumnMappings.Add("在网情况", "fb_online");
sbc.ColumnMappings.Add("订购是否成功", "fb_order_result");
sbc.ColumnMappings.Add("离网日期", "fb_leave_dt");
sbc.BatchSize = 1000; //设置每次放入条数
sbc.WriteToServer(ds.Tables[0]);
}
return ds.Tables[0].Rows.Count;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return 0;
}
}
return 0;
}
public DataSet CSV_Getds(string filePath)
{
try
{
string[] name = GetTablesFromOleDb(filePath);
string a = name[0].Replace("'", "");
string OLEDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + filePath;
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);
DataSet sourceDataTable = new DataSet();
oda.Fill(sourceDataTable);
oda.Dispose();
return sourceDataTable;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return null;
}
}
}
}