// 1.将excel数据导入到DataSet中;
//2.将DataSet里面的数据遍历插入到对应的数据库
private void simpleButton6_Click(object sender, EventArgs e)
{
DataTable ds = getData().Tables[0];//得到要导入的excel数据,转化成数据源
for (int j = 0; j < ds.Rows.Count; j++)
{
string part_id = ds.Rows[j][0].ToString(); //Rows[i]["col1"]表示i行"col1"字段
string proc_path = ds.Rows[j][1].ToString();
string robot_no = ds.Rows[j][2].ToString();
string mid_1 = ds.Rows[j][3].ToString();
string mid_2 = ds.Rows[j][4].ToString();
string mid_3 = ds.Rows[j][5].ToString();
string cut1 = ds.Rows[j][6].ToString();
string cut2 = ds.Rows[j][7].ToString();
string num = ds.Rows[j][8].ToString();
string dd = ds.Rows[j][9].ToString();
insertMysqlDB(part_id, proc_path, robot_no, mid_1, mid_2, mid_3, cut1, cut2, num, dd);//更新数据到数据库
}
GridControl1.DataSource = null; //每次打开清空内容
GridControl1.DataSource = ds;
ShowData(0);
}
private DataSet getData()
{
//打开文件
OpenFileDialog file = new OpenFileDialog();
file.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
file.Multiselect = false;
if (file.ShowDialog() == DialogResult.Cancel)
return null;
//判断文件后缀
var path = file.FileName;
string fileSuffix = System.IO.Path.GetExtension(path);
if (string.IsNullOrEmpty(fileSuffix))
return null;
using (DataSet ds = new DataSet())
{
//判断Excel文件是2003版本还是2007版本
string connString = "";
if (fileSuffix == ".xls")
connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
else
connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
//读取文件
string sql_select = " SELECT * FROM [Sheet1$]";
using (OleDbConnection conn = new OleDbConnection(connString))
using (OleDbDataAdapter cmd = new OleDbDataAdapter(sql_select, conn))
{
conn.Open();
cmd.Fill(ds);
}
if (ds == null || ds.Tables.Count <= 0) return null;
return ds;
}
}
private void insertMysqlDB(string part_id, string proc_path, string robot_no, string mid_1, string mid_2, string mid_3, string cut1, string cut2, string num, string dd)
{
//插入数据到数据库
if (mysqlcon.State == ConnectionState.Closed)
mysqlcon.Open();//打开通道,建立连接,可能出现异常,使用try catch语句
MySqlTransaction transaction = mysqlcon.BeginTransaction();//事务必须在try外面赋值不然catch里的transaction会报错:未赋值
try
{
//在这里使用代码对数据库进行增删查改,新增
//string updatesql1 = "update product set proc_path='" + name + "',part_id='" + sn + "',robot_no = " + Int16.Parse(quantity) + ",mid_1=" + float.Parse(mid_1) + ",mid_2=" + float.Parse(mid_2) + ",mid_3=" + float.Parse(mid_3) + "," +
// " dd=" + float.Parse(dd) + ",proc_len=" + float.Parse(cut1) + ",proc_len_end=" + float.Parse(cut2) + ",num = " + Int16.Parse(num) + "";
string intsqls1 = "insert into ikm_shenfei.product (part_id,proc_path, num,robot_no,mid_1,mid_2,mid_3,proc_len,proc_len_end,dd) Values" +
" ('" + part_id + "', '" + proc_path + "', " + Int16.Parse(num) + "," + robot_no + ", " + float.Parse(mid_1) + "," + float.Parse(mid_2) + ", " + float.Parse(mid_3) + ", " + float.Parse(cut1) + ", " + float.Parse(cut2) + ", " + float.Parse(dd) + ") ";//新增数值
MySqlCommand cmd = new MySqlCommand(intsqls1, mysqlcon);
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Console.WriteLine(ex.Message);
transaction.Rollback();//事务ExecuteNonQuery()执行失败报错
mysqlcon.Close();
}
finally
{
if (mysqlcon.State != ConnectionState.Closed)
{
transaction.Commit();//事务要么回滚要么提交,即Rollback()与Commit()只能执行一个
//conn.Close();
}
}
}