问题描述
C#做个通用实现不同Excel表导入不同数据库问题出现在导入一个表时那就对应这个表字段完事数据库里建相同字段的数据库那我想实现好几个Excel表导入不同数据库怎么做因为每个表字段不一样怎么能实现简单点就假如我就要导5个表而且把表字段都对应了我做的是导1表就把其余4个表字段注释了我想怎么能不用注释想导几表就是几表会的帮帮忙谢啦privatevoidbutton3_Click(objectsender,EventArgse){//添加单挑记录//stringname=dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//intage=Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[1].Value.ToString());//stringxbie=dataGridView1.SelectedRows[0].Cells[2].Value.ToString();//Add(name,age,xbie);boolbFlag=AddDatasetToSQL(ExecleDs(txtEntry.Text));}///<summary>///将Dataset的数据导入数据库///</summary>///<paramname="pds">数据集</param>///<paramname="Cols">数据集列数</param>///<returns></returns>publicboolAddDatasetToSQL(DataSetpds){if(pds!=null&&pds.Tables[0].Rows.Count>0){for(inti=1;i<pds.Tables[0].Rows.Count;i++){//类型表Add(//Convert.ToInt32(pds.Tables[0].Rows[i][0].ToString()),pds.Tables[0].Rows[i][0].ToString(),pds.Tables[0].Rows[i][1].ToString());}//类别表//Add(//Convert.ToInt32(pds.Tables[0].Rows[i][0].ToString()),//pds.Tables[0].Rows[i][0].ToString(),//pds.Tables[0].Rows[i][1].ToString());//}//名称表//stringExistSql="selectcount(*)fromTable_namewhereForm_a_name='"+pds.Tables[0].Rows[i][1].ToString()+"'";//if((int)SQLE.GetScalarData(ExistSql)>0)//{//MessageBox.Show("该记录已存在!");//returnfalse;//}//Add(pds.Tables[0].Rows[i][0].ToString(),//pds.Tables[0].Rows[i][1].ToString(),//pds.Tables[0].Rows[i][2].ToString());//}//材质表//stringExistSql="selectcount(*)fromTable_materwhereCard_number='"+pds.Tables[0].Rows[i][1].ToString()+"'";//if((int)SQLE.GetScalarData(ExistSql)>0)//{//MessageBox.Show("该记录已存在!");//returnfalse;//}//Add(pds.Tables[0].Rows[i][0].ToString(),//pds.Tables[0].Rows[i][1].ToString());//}//规格表//Add(pds.Tables[0].Rows[i][0].ToString(),//pds.Tables[0].Rows[i][1].ToString());//}MessageBox.Show("插入成功!");}else{thrownewException("导入数据为空!");}returntrue;}///<summary>///插入数据到数据库///</summary>//类型表publicvoidAdd(stringMetal_category,stringCategory_classcode){StringBuilderstrSql=newStringBuilder();strSql.Append("insertintoTable_type(");strSql.Append("Metal_category,Category_classcode");strSql.Append(")");strSql.Append("values(");strSql.Append("'"+Metal_category.Trim()+"',");strSql.Append("'"+Category_classcode.Trim()+"'");//类别表//publicvoidAdd(stringForm_category,stringForm_category_c)//{//StringBuilderstrSql=newStringBuilder();//strSql.Append("insertintoTable_category(");//strSql.Append("Form_category,Form_category_c");//strSql.Append(")");//strSql.Append("values(");//strSql.Append("'"+Form_category.Trim()+"',");//strSql.Append("'"+Form_category_c.Trim()+"'");//名称表//publicvoidAdd(stringForm_a_subclass_c,stringForm_a_name,stringReferred_to)//{//StringBuilderstrSql=newStringBuilder();//strSql.Append("insertintoTable_name(");//strSql.Append("Form_a_subclass_c,Form_a_name,Referred_to");//strSql.Append(")");//strSql.Append("values(");//strSql.Append("'"+Form_a_subclass_c+"',");//strSql.Append("'"+Form_a_name.Trim()+"',");//strSql.Append("'"+Referred_to.Trim()+"'");//材质表//publicvoidAdd(stringBrand,stringCard_number)//{//StringBuilderstrSql=newStringBuilder();//strSql.Append("insertintoTable_mater(");//strSql.Append("Brand,Card_number");//strSql.Append(")");//strSql.Append("values(");//strSql.Append("'"+Brand.Trim()+"',");//strSql.Append("'"+Card_number.Trim()+"'");//规格表//publicvoidAdd(stringSpecification_name,stringSpecification)//{//StringBuilderstrSql=newStringBuilder();//strSql.Append("insertintoTable_specifications(");//strSql.Append("Specification_name,Specification");//strSql.Append(")");//strSql.Append("values(");//strSql.Append("'"+Specification_name.Trim()+"',");//strSql.Append("'"+Specification.Trim()+"'");strSql.Append(")");SqlConnectionconn=newSqlConnection(strConn);conn.Open();SqlCommandcomd=newSqlCommand(strSql.ToString(),conn);comd.ExecuteNonQuery();conn.Close();
解决方案
解决方案二:
用if判断啊,,不执行代码就可以了
解决方案三:
界面上做个选择项,根据选择项来判断导入那个表就可以
解决方案四:
可以用OleDbConnection类的GetSchema方法得到Excel各个表的各个列的列标题,然后匹配一下,就知道要导入的是哪个表,这样就不用人工选了