excel数据导入问题
最近写excel数据导入,代码贴出了,时间找了再给自己看看
代码
private DataTable Getxlssheet(string filepath)
{
StringBuilder xlsstring = new StringBuilder();
xlsstring.Append("Provider= Microsoft.Jet.OLEDB.4.0;Data Source =");
xlsstring.Append("'");
xlsstring.Append(filepath);
xlsstring.Append("';");
xlsstring.Append(" Extended Properties='Excel 8.0;HDR=Yes;imex=1'");
OleDbConnection cnnxls = new OleDbConnection(xlsstring.ToString().Trim());
cnnxls.Open();
//读取sheet名称
DataTable dtSchema = cnnxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
return dtSchema;
}
private DataSet GetxlsData(string xlstabname, string filepath)
{
StringBuilder sqlstring = new StringBuilder();
sqlstring.Append("select * from [");
sqlstring.Append(xlstabname);
sqlstring.Append("]");
StringBuilder xlsstring = new StringBuilder();
xlsstring.Append("Provider= Microsoft.Jet.OLEDB.4.0;Data Source =");
xlsstring.Append("'");
xlsstring.Append(filepath);
xlsstring.Append("';");
xlsstring.Append(" Extended Properties='Excel 8.0;HDR=Yes;imex=1'");
OleDbConnection cnnxls = new OleDbConnection(xlsstring.ToString().Trim());
OleDbDataAdapter myda = new OleDbDataAdapter(sqlstring.ToString().Trim(), cnnxls);//OleDbDataAdapter myda = new OleDbDataAdapter("select * from [蒸发量$]", cnnxls);
DataSet myxlsDs = new DataSet();
myda.Fill(myxlsDs);
cnnxls.Close();
cnnxls.Dispose();
return myxlsDs;
}
public void AddEvapor(string filepath, string[] getfiledate, ref string strError)
{
Database db = null;
DbConnection dc = null;
DbTransaction trans = null;
db = DatabaseFactory.CreateDatabase(DBConnectManager.CPOracleConnectString);
dc = db.CreateConnection();
dc.Open();
trans = dc.BeginTransaction();
DataTable dt = Getxlssheet(filepath);
try
{
foreach (DataRow dr in dt.Rows)
{
string table = dr["TABLE_NAME"].ToString();
switch (table)
{
case "aa$":
{
AddRainFall("aa$", filepath, db, trans, getfiledate);
break;
}
case "bb$":
{
AddEvaporation("bb$", filepath, db, trans, getfiledate);
break;
}
case "cc$":
{
AddWateflow("cc$", filepath, db, trans);
break;
}
case "ee$":
{
AddWateLevel("ee$", filepath, db, trans);
break;
}
case "dd$":
{
AddDataResvervoir("dd$", filepath, db, trans, getfiledate);
break;
}
default:
break;
}
}
trans.Commit();
}
catch (Exception ex)
{
if (ex.Message.Contains("ORA-00001: 违反唯一约束条件"))
{
strError = SystemConstant.ErrorSymbol + "不能重复插入数据,请先删除!";
}
else
{
strError = SystemConstant.ErrorSymbol + ex.Message;
}
trans.Rollback();
}
finally
{
if (dc != null)
{
dc.Close();
}
}
}
public void AddRainFall(string xlsname, string filepath, Database db, DbTransaction trans, string[] filedate)
{
string setname = "";
List<DBDictionary> dblist = new List<DBDictionary>();
DataSet myxlsDs = GetxlsData(xlsname, filepath);
string sheetname = xlsname.Replace("$","");
if (myxlsDs.Tables[0].Rows.Count > 0)
{
DBDictionary dic = null;
foreach (DataRow dr in myxlsDs.Tables[0].Rows)
{
//处理空行
if (dr[0].ToString().Trim().Trim() == "" && dr[1].ToString().Trim().Trim() == "")
{
break;
}
//处理合并单元格
if (dr[0].ToString().Trim().Trim() != "")
{
setname = dr[0].ToString().Trim();
}
string SelectSql = "select count(*) from table where id=value";
if (DataCheck(SelectSql, db, trans) == true)
{
//插入
}
else
{
//更新
}
}
new DBHelper().SaveData(db, trans, dblist);
}
}
/// <summary>
/// 判断数据是否已经存在
/// </summary>
/// <param name="ExcSql"></param>
/// <returns></returns>
private bool DataCheck(string ExcSql, Database db, DbTransaction trans)
{
object o = db.ExecuteScalar(trans, CommandType.Text, ExcSql);
if (o == null) return true;
if (int.Parse(o.ToString()) > 0)
return false;
return true;
}