#region 数据移植
private void Integrate(string filename)
{
DataSet ds=new DataSet();
DataSet ds1=new DataSet();
ds.ReadXml(@"c:/data/Integrate/"+filename+"col.xml");
DataTable table=ds.Tables[0];
ds1.ReadXml(@"c:/data/Integrate/"+filename+".xml");
DataTable table1=ds1.Tables[0];
try
{
if(table1.Rows.Count>0)// 检查是否有数据存在(rows)创建数据库表
{ string DB=this.comboBox2.SelectedItem.ToString();
string conn=null;
switch(this.comboBox4.SelectedIndex)
{
case 0:
conn="Provider=SQLOLEDB; Data Source=localhost; Initial Catalog="+DB+";User ID=sa;Password=sa";
break;
case 1:
conn="Provider=OraOLEDB.Oracle;Data Source=oradb;User Id=sczb;Password=sczb" ;
break;
case 2:
conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://data//database.mdb";
break;
case 3:
conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://data//database.xls;Extended Properties=Excel 8.0";
break;
default:
MessageBox.Show("数据库类型被默认为sql server 2000!");
conn="Provider=SQLOLEDB; Data Source=localhost; Initial Catalog="+DB+";User ID=sa;Password=sa";
break;
}
OleDbConnection oledbConn =new OleDbConnection(conn );
try
{oledbConn.Open();}
catch(Exception exp)
{
string error=exp.Message.ToString();
MessageBox.Show(error);
}
// 创建数据库连接,打开数据库,得到数据库表的架构信息
DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null,filename, "TABLE"});
if(schemaTable.Rows.Count < 1)// 检查表是否存在,如果存在在DataTable中将有一条记录
{
try
{
string sqlCmd="create table "+filename+ "(";
for(int i=0;i<table.Rows.Count;i++)
{
sqlCmd=sqlCmd+table.Rows[i][0].ToString()+" "+vType(this.comboBox4.SelectedIndex,table.Rows[i][1].ToString())+",";
}
sqlCmd=sqlCmd.Substring(0,sqlCmd.Length-1)+ ")";
OleDbCommand oledbCmd=new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();
}
catch(Exception exp)
{
string error=exp.Message.ToString();
MessageBox.Show(exp.Message);
}
}
if(this.comboBox4.SelectedIndex!=3)//对于特殊的数据库类型excel由于不支持delete语句,因此要特别处理一下。即为了避免重复插入数据,要手动清空后再插入!
{
OleDbCommand DelCmd=new OleDbCommand("delete from "+filename,oledbConn);
DelCmd.ExecuteNonQuery();
}
foreach(DataRow dr in table1.Rows)//插入记录
{
string InsertCmd = "insert into "+filename+"(";
// 遍历Datatable的列
for(int i = 0;i <table1.Columns.Count;i++)
{
// 添加column name
InsertCmd = InsertCmd + table1.Columns[i].ColumnName.ToString() + ",";
}
InsertCmd = InsertCmd.Substring(0,InsertCmd.Length-1) + ") values (";
// 遍历 DataTable columns
for(int x = 0;x < table1.Columns.Count;x++)
{
// 添加column value到row
InsertCmd =InsertCmd+ "'" + dr[x].ToString().Replace("'","''").Replace("/0","") + "',";
}
InsertCmd= InsertCmd.Substring(0,InsertCmd.Length - 1) + ")";
OleDbCommand Cmd=new OleDbCommand(InsertCmd,oledbConn);
Cmd.ExecuteNonQuery();
}
MessageBox.Show("入库成功!");
if(this.comboBox4.SelectedIndex==3&&schemaTable.Rows.Count==1)
{
MessageBox.Show("Excel文件已经被插入记录,请手工删除重复记录!");//对于特殊的数据库类型excel由于不支持delete语句,因此要特别处理一下。即为了避免重复插入数据,要手动清空后再插入!
}
}
else
{
MessageBox.Show("Xml文件中没有数据!");
}
}
catch
{
MessageBox.Show("入库失败!");
}
ds.Dispose();
}
#endregion