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;
}

 

 

 

posted on 2010-07-14 12:35  sivan  阅读(178)  评论(0编辑  收藏  举报

导航