当前位置: 代码迷 >> C# >> 用C#导入excel表,效能已经实现,求高手给解释一下每部都是什么用
  详细解决方案

用C#导入excel表,效能已经实现,求高手给解释一下每部都是什么用

热度:49   发布时间:2016-05-05 04:54:09.0
用C#导入excel表,功能已经实现,求高手给解释一下每部都是什么用!
public void import_excel()
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel files(*.xls)|*.xls";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                FileInfo fileInfo = new FileInfo(openFileDialog.FileName);
                string filePath = fileInfo.FullName;
                string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0";
                try
                {
                    OleDbConnection oleDbConnection = new OleDbConnection(connExcel);
                    oleDbConnection.Open();
                    DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    string tableName = dataTable.Rows[0][2].ToString().Trim();
                    tableName = "[" + tableName.Replace("'", "") + "]";
                    string query = "SELECT * FROM " + tableName;
                    DataSet dataSet = new DataSet();
                    OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, connExcel);
oleAdapter.Fill(dataSet, tableName);
                    DataGrid dataGrid = new DataGrid();
DataTable dataTable1 = new DataTable();
                    string strconn = "Data Source=192.168.2.149,1433;Network Library = DBMSSOCN;Initial Catalog = db_sqlserver;User ID=sa;Password='admin_123';";
                    SqlConnection sqlConnection = new SqlConnection(strconn);
                    sqlConnection.Open();
                    SqlDataAdapter sqlDA1 = new SqlDataAdapter(@"SELECT id, djh,tdsyz, zdmj FROM gch_Class_Info", sqlConnection);
                    SqlCommandBuilder sqlCB1 = new SqlCommandBuilder(sqlDA1);
                    sqlDA1.Fill(dataTable1);
                    foreach (DataRow dataRow in dataSet.Tables[tableName].Rows)
                    {
DataRow dataRow1 = dataTable1.NewRow();
                        dataRow1["id"] = dataRow["序号"];
                        dataRow1["djh"] = dataRow["地籍号"];
                        dataRow1["tdsyz"] = dataRow["土地使用者"];
                        dataRow1["zdmj"] = dataRow["宗地面积"];
                        dataTable1.Rows.Add(dataRow1);
                    }
                    Console.WriteLine("新插入 " + dataTable1.Rows.Count.ToString() + " 条记录");
                    sqlDA1.Update(dataTable1);
                    oleDbConnection.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

        }

------解决思路----------------------
OpenFileDialog openFileDialog = new OpenFileDialog();   //构造打开文件对话框
            openFileDialog.Filter = "Excel files(*.xls)
------解决思路----------------------
*.xls
------解决思路----------------------
txt文件
------解决思路----------------------
*.txt";     //打开文件过滤扩展名
            if (openFileDialog.ShowDialog() == DialogResult.OK)    //如果打开文件对话框点了OK

后边的继续努力 翻译 呵呵!
------解决思路----------------------
 FileInfo fileInfo = new FileInfo(openFileDialog.FileName);  //根据打开文件的文件路径,生成FileInfo对象方便才做
                string filePath = fileInfo.FullName;//获取文件全名
                string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0";//excel的驱动。。或者叫连接字符串




               
------解决思路----------------------
 tableName = "[" + tableName.Replace("'", "") + "]";
                    string query = "SELECT * FROM " + tableName;
                    DataSet dataSet = new DataSet();
                    OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, connExcel);
                    oleAdapter.Fill(dataSet, tableName);
这部分就是读取excel的数据,填充到dataSet中,


  string strconn = "Data Source=192.168.2.149,1433;Network Library = DBMSSOCN;Initial Catalog = db_sqlserver;User ID=sa;Password='admin_123';";
                    SqlConnection sqlConnection = new SqlConnection(strconn);
                    sqlConnection.Open();
                    SqlDataAdapter sqlDA1 = new SqlDataAdapter(@"SELECT id, djh,tdsyz, zdmj FROM gch_Class_Info", sqlConnection);
                    SqlCommandBuilder sqlCB1 = new SqlCommandBuilder(sqlDA1);
                    sqlDA1.Fill(dataTable1);
连接目标数据库,将数据库的数据填充到表中dataTable1



以下是取出dataSet中的数据,插入到dataTable1中,再更新到数据库
 foreach (DataRow dataRow in dataSet.Tables[tableName].Rows)
                    {
                        DataRow dataRow1 = dataTable1.NewRow();
                        dataRow1["id"] = dataRow["序号"];
                        dataRow1["djh"] = dataRow["地籍号"];
                        dataRow1["tdsyz"] = dataRow["土地使用者"];
                        dataRow1["zdmj"] = dataRow["宗地面积"];
                        dataTable1.Rows.Add(dataRow1);
                    }
                    Console.WriteLine("新插入 " + dataTable1.Rows.Count.ToString() + " 条记录");
                    sqlDA1.Update(dataTable1);
                    oleDbConnection.Close();

------解决思路----------------------
说白了就是使用oledb把excel表当数据库表读取

------解决思路----------------------
你实在不会,可以单步调试一下里面的数据,可能会加深你的理解~
  相关解决方案