您的位置:首页 > 数据库

读取Excel内容,导入数据库多张表!

2007-08-05 08:43 549 查看
客户要求用Excel记录联系人资料,并导入数据库,找了个第3方Wizard控件做了个小功能。
Excel每一个sheet为一个企业名,为了避免麻烦,一次性导入所有联系人。
 同一企业下的相同姓名,相同手机号的为同一个联系人,就不导入。
Excel表中,有些字段不在同一张表:“部门”、“职务”。判断部门和职务是否存在,若不存在添加到部门和职务表,返回ID。
几次测试,取手机号等字段出错,原来要把Excel单元格格式设为文本。




/**//*         Author : Magicam 


 *         Date   : 1 August 2007


 *         e-mail : wx_magicam@sina.com


 */        


using System;


using System.Collections.Generic;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Text;


using System.Windows.Forms;


using System.Data.SqlClient;


using System.Data.OleDb;


using CristiPotlog.Controls;//引用第3方向导式控件


using System.Configuration;




namespace Excel






{


    public partial class ExcelForm : Form




    

{


        public ExcelForm()




        

{


            InitializeComponent();


        }




        public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings[ "DataConnectionString" ].ConnectionString;






        /**//// <summary>


        /// 完成按钮


        /// </summary>


        /// <param name="sender"></param>


        /// <param name="e"></param>


        private void wizard1_Finish( object sender, EventArgs e )




        

{


            MessageBox.Show( "导入成功!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information );


        }




        private void wizard1_Cancel( object sender, CancelEventArgs e )




        

{


            bool isTaskRunning = this.timer1.Enabled;


            this.timer1.Enabled = false;




            if ( MessageBox.Show( "确定退出吗?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question ) != DialogResult.Yes )




            

{


                e.Cancel = true;


                this.timer1.Enabled = isTaskRunning;


            }


        }






        /**//// <summary>


        /// time控件


        /// </summary>


        /// <param name="sender"></param>


        /// <param name="e"></param>


        private void timer1_Tick( object sender, EventArgs e )




        

{


            if ( this.progressBar1.Value == this.progressBar1.Maximum )




            

{


                this.timer1.Enabled = false;


                this.wizard1.Next();


            }


            else




            

{


                this.progressBar1.PerformStep();


            }


        }






        /**//// <summary>


        /// 选择Excel按钮


        /// </summary>


        /// <param name="sender"></param>


        /// <param name="e"></param>


        private void btnChooseExcel_Click( object sender, EventArgs e )




        

{


            OpenFileDialog openFileDialog = new OpenFileDialog();


            openFileDialog.Filter = "Microsoft Excel 文件(*.xls)|*.xls";


            openFileDialog.Title = "选择Excel文件";




            if ( DialogResult.Cancel == openFileDialog.ShowDialog())




            

{


                return;


            }




            string ExcelPath = openFileDialog.FileName;


            txtExcelPath.Text = ExcelPath;




            string ConnectionExcel = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + ExcelPath + ";" + "Extended Properties=Excel 8.0;";




            OleDbConnection conn = new OleDbConnection( ConnectionExcel );


            conn.Open();


            System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable( System.Data.OleDb.OleDbSchemaGuid.Tables, null );




            dataGridView1.Rows.Clear();


            dataGridView1.Columns.Clear();




            //定义dataGridView第一列


            dataGridView1.RowHeadersVisible = false;


            DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();


            textColumn.HeaderText = "工作表";


            dataGridView1.Columns.Insert( 0, textColumn );


            //定义dataGridView第二列


            DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();


            comboColumn.HeaderText = "选择企业";


            comboColumn.AutoComplete = true;


            dataGridView1.Columns.Insert( 1, comboColumn );




            SqlConnection con = new SqlConnection( ConnectionString );


            con.Open();




            for( int i = 0; i < schemaTable.Rows.Count; i++ )




            

{


                //取出Excel工作表名导入dataGridView第一列




                string tableName = schemaTable.Rows[ i ][ 2 ].ToString().Trim( new char[] 

{ '$', '/'' } );


                dataGridView1.Rows.Add();


                dataGridView1.Rows[ i ].Cells[ 0 ].Value = tableName;




                OnInitComboBox( i );


            }          


        }




        private void OnInitComboBox( int row )




        

{


            //第二列根据第一列做模糊查询,供用户选择企业名


            SqlConnection con = new SqlConnection( ConnectionString );


            con.Open();




            SqlDataAdapter sda = new SqlDataAdapter();


            DataSet ds = new DataSet();




            string name = dataGridView1.Rows[ row ].Cells[ 0 ].Value.ToString();


            string str = "select id, name from enterprise where name like '%" + name + "%'";




            sda.SelectCommand = new SqlCommand( str, con );


            sda.Fill( ds, "enterprise" );




            (( DataGridViewComboBoxCell )( dataGridView1.Rows[ row ].Cells[ 1 ] )).DataSource    = ds.Tables[ 0 ].DefaultView;


            (( DataGridViewComboBoxCell )( dataGridView1.Rows[ row ].Cells[ 1 ] )).ValueMember   = "id";


            (( DataGridViewComboBoxCell )( dataGridView1.Rows[ row ].Cells[ 1 ] )).DisplayMember = "name";


        }




        private void wizard1_BeforeSwitchPages( object sender, Wizard.BeforeSwitchPagesEventArgs e )




        

{


            WizardPage oldPage = this.wizard1.Pages[ e.OldIndex ];




            if ( oldPage == this.ChooseExcelPage && e.NewIndex > e.OldIndex )




            

{                


                if ( txtExcelPath.Text == "" )




                

{                   


                    MessageBox.Show( "请选择一个Excel文件!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information );


                    e.Cancel = true;


                }


            }


            else if( oldPage == this.ChooseEnterprisePage && e.NewIndex > e.OldIndex )




            

{


                SqlConnection con = new SqlConnection( ConnectionString );


                con.Open();




                for( int i = 0; i<dataGridView1.Rows.Count; i++ )




                

{


                    if( dataGridView1.Rows[ i ].Cells[ 1 ].Value == null )




                    

{


                        MessageBox.Show( "请选择企业!",  this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information );                        


                        e.Cancel = true;


                    }                    


                }


            }


            else if( oldPage == this.ProgressPage && e.NewIndex > e.OldIndex )




            

{


                //导入数据库 


                for( int i = 0; i<dataGridView1.Rows.Count; i++ )




                

{


                    //读取Excel内容到table


                    DataSet DataSet = ReadExcelToTable( i );                                 




                    for( int j = 0; j<DataSet.Tables[ 0 ].Rows.Count; j++ )




                    

{


                        SqlConnection con = new SqlConnection( ConnectionString );


                        con.Open();   


                        SqlTransaction transaction;


                        transaction = con.BeginTransaction();


                        try




                        

{


                            //判断联系人是否重复,若重复跳出循环,不添加


                            string LinkmanName = DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 0 ].ToString();


                            string LinkmanMobile = DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 3 ].ToString();


                            SqlCommand selectLinkmanName = new SqlCommand();


                            selectLinkmanName.Connection = con;


                            selectLinkmanName.CommandText = "select count( * ) from linkman where enterpriseid='" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "'and name='" + LinkmanName + "' and mobile='" + LinkmanMobile + "'";


                            selectLinkmanName.Transaction = transaction;


                            int LinkmanCount = Convert.ToInt32( selectLinkmanName.ExecuteScalar());




                            if( LinkmanCount > 0 )




                            

{


                                continue;                               


                            }            




                            //判断是否存在该部门,不存在添加                   


                            int departmentID = ExistDepartment( con, DataSet, j, transaction );




                            //判断是否存在该职务,不存在添加


                            int dutyID = ExistDuty( con, DataSet, j, transaction );




                            //导入数据库


                            InsertTOSql( con, i, DataSet, j, departmentID, dutyID, transaction );


                        }


                        catch( Exception e1 )




                        

{


                            transaction.Rollback();        


                        }


                        finally




                        

{


                            transaction.Commit();


                            con.Close();


                        }


                    }


                } 


            }


        }




        private void InsertTOSql( SqlConnection con, int i, DataSet DataSet, int j, int departmentID, int dutyID, SqlTransaction transaction )




        

{


            SqlCommand insertToSql = new SqlCommand();


            insertToSql.Connection = con;


            insertToSql.CommandText = @"insert into linkman( enterpriseID, name, departmentID, dutyID, mobile, phone, email, fax, IsLinkman )


                                      values( " + dataGridView1.Rows[ i ].Cells[ 1 ].Value.ToString() + ", '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 0 ].ToString() + "', " + departmentID + ", "


                          + dutyID + ", '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 3 ].ToString() + "', '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 4 ].ToString() + "', '" +


                          DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 5 ].ToString() + "', '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 6 ].ToString() + "', 1 )"; 


            insertToSql.Transaction = transaction;


            insertToSql.ExecuteNonQuery();            


        }




        private static int ExistDuty( SqlConnection con, DataSet DataSet, int j, SqlTransaction transaction )




        

{


            SqlCommand selectDuty = new SqlCommand();


            selectDuty.Connection = con;


            selectDuty.CommandText = "select id from duty where name ='" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 2 ].ToString() + "'";


            selectDuty.Transaction = transaction;


            int dutyID = Convert.ToInt32( selectDuty.ExecuteScalar());


            if ( dutyID == 0 )




            

{


                SqlCommand insertDuty = new SqlCommand();


                insertDuty.Connection = con;


                insertDuty.CommandText = "insert into duty( name ) values( '" + DataSet.Tables[0].Rows[ j ].ItemArray[ 2 ].ToString() + "')";


                insertDuty.Transaction = transaction;


                insertDuty.ExecuteNonQuery(); 


               


                dutyID = GetID( con, transaction );


            }


            return dutyID;


        }




        private static int ExistDepartment( SqlConnection con, DataSet DataSet, int j, SqlTransaction transaction )




        

{


            SqlCommand selectDepartment = new SqlCommand();


            selectDepartment.Connection = con;


            selectDepartment.CommandText = "select id from department where name = '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 1 ].ToString() + "'";


            selectDepartment.Transaction = transaction;


            int departmentID = Convert.ToInt32( selectDepartment.ExecuteScalar());


            if ( departmentID == 0 )




            

{


                SqlCommand insertDepartment = new SqlCommand();


                insertDepartment.Connection = con;




                insertDepartment.CommandText = "insert into department( name ) values( '" + DataSet.Tables[ 0 ].Rows[ j ].ItemArray[ 1 ].ToString() + "' )";


                insertDepartment.Transaction = transaction;


                insertDepartment.ExecuteNonQuery();


               


                departmentID = GetID( con, transaction );


            }


            return departmentID;


        }




        private static int GetID( SqlConnection con, SqlTransaction transaction )




        

{


            string sql = "select @@identity";


            SqlCommand command = new SqlCommand( sql, con );


            command.Transaction = transaction;


            return Convert.ToInt32( command.ExecuteScalar());


        }




        private DataSet ReadExcelToTable( int i )




        

{


            string ConnectionExcel = "Provider=Microsoft.Jet.Oledb.4.0;Data Source='" + txtExcelPath.Text + "';Extended Properties=Excel 8.0";


            OleDbConnection connection = new OleDbConnection( ConnectionExcel );


            OleDbDataAdapter adp = new OleDbDataAdapter( "Select * from  [" + dataGridView1.Rows[ i ].Cells[ 0 ].Value.ToString() + "$]", connection );


            DataSet DataSet = new DataSet();


            adp.Fill( DataSet, "Book1" );


            return DataSet;


        }




        private void wizard1_AfterSwitchPages( object sender, Wizard.AfterSwitchPagesEventArgs e )




        

{


            WizardPage newPage = this.wizard1.Pages[ e.NewIndex ];




            if( newPage == this.ChooseExcelPage )




            

{


                this.wizard1.NextEnabled = this.ChooseEnterprisePage.Enabled;


            }


            else if( newPage == this.ChooseEnterprisePage )




            

{


                this.wizard1.NextEnabled = this.ProgressPage.Enabled;


            }


            else if( newPage == this.ProgressPage)




            

{


                this.wizard1.BackEnabled = false;


                this.wizard1.NextEnabled = false;


                this.progressBar1.Value = this.progressBar1.Minimum;


                this.timer1.Enabled = true;


            }


        }


    }


}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息