首页 > 技术文章 > 关于Excel数据批量导入数据库的案例

MaNongWorld 2016-10-10 14:47 原文

    写这个案例主要是感觉这个功能挺实用,很多地方会用得到的,废话就不多说了,直接上对应的源码。

    这个案例我运用的是Winform窗体程序实现数据的导入。

    首先是数据库的登陆界面如下:

源码如下:

  1 using System;
  2 using System.Data.SqlClient;
  3 using System.Windows.Forms;
  4 
  5 namespace Winform_SqlBulkCopy
  6 {
  7     public partial class Frm_SetServer : Form
  8     {
  9         #region 全局变量
 10         /// <summary>
 11         /// 数据库连接字符串
 12         /// </summary>
 13         string sqlconnstr;
 14         #endregion
 15 
 16         #region 构造函数
 17         /// <summary>
 18         /// 构造函数
 19         /// </summary>
 20         public Frm_SetServer()
 21         {
 22             InitializeComponent();
 23             Load += new EventHandler(SetServer_Load);
 24         }
 25         #endregion
 26 
 27         #region 窗体加载
 28         /// <summary>
 29         /// 窗体加载
 30         /// </summary>
 31         /// <param name="sender"></param>
 32         /// <param name="e"></param>
 33         void SetServer_Load(object sender, EventArgs e)
 34         {
 35             Init();
 36             Evenhand();
 37         }
 38         #endregion
 39 
 40         #region 初始化
 41         /// <summary>
 42         /// 初始化
 43         /// </summary>
 44         void Init()
 45         {
 46             AcceptButton = bt_Conn_Test;
 47             MaximizeBox = false;
 48             MaximumSize = MinimumSize = Size;
 49         }
 50         #endregion
 51 
 52         #region 事件源绑定
 53         /// <summary>
 54         /// 事件源绑定
 55         /// </summary>
 56         void Evenhand()
 57         {
 58             //单选按钮
 59             rd_SqlServer.Click += new EventHandler(rd_Click);
 60             rd_Windows.Click += new EventHandler(rd_Click);
 61             //按钮
 62             bt_Conn_Test.Click += new EventHandler(bt_Click);
 63             bt_Login.Click += new EventHandler(bt_Click);
 64         }
 65         #endregion
 66 
 67         #region 控件事件
 68 
 69         #region 选中单选按钮
 70         /// <summary>
 71         /// 选中单选按钮
 72         /// </summary>
 73         /// <param name="sender"></param>
 74         /// <param name="e"></param>
 75         void rd_Click(object sender, EventArgs e)
 76         {
 77             switch ((sender as RadioButton).Name)
 78             {
 79                 case "rd_Windows":
 80                     lb_Uid.Enabled = false;
 81                     lb_Pwd.Enabled = false;
 82                     txt_Uid.Enabled = false;
 83                     txt_Pwd.Enabled = false;
 84                     break;
 85                 case "rd_SqlServer":
 86                     lb_Uid.Enabled = true;
 87                     lb_Pwd.Enabled = true;
 88                     txt_Uid.Enabled = true;
 89                     txt_Pwd.Enabled = true;
 90                     break;
 91                 default:
 92                     break;
 93             }
 94         }
 95         #endregion
 96 
 97         #region 单击按钮
 98         /// <summary>
 99         /// 单击按钮
100         /// </summary>
101         /// <param name="sender"></param>
102         /// <param name="e"></param>
103         void bt_Click(object sender, EventArgs e)
104         {
105             if (txt_Server.Text.Trim().Length == 0)
106             { MessageBox.Show("ServerName Is Null ."); return; }
107             if (rd_SqlServer.Checked)
108             {
109                 if (txt_Uid.Text.Trim().Length == 0)
110                 { MessageBox.Show("Uid Is Null ."); return; }
111                 if (txt_Pwd.Text.Trim().Length == 0)
112                 { MessageBox.Show("Pwd Is Null ."); return; }
113             }
114             switch ((sender as Button).Name)
115             {
116                 case "bt_Conn_Test"://测试连接
117                     bt_Login.Enabled = false;
118                     if (rd_SqlServer.Checked)//sqlserver登陆
119                     {
120                         using (SqlConnection conn = new SqlConnection(string.Format(@"server={0};database=master;uid={1};pwd={2}",
121                             txt_Server.Text.Trim(), txt_Uid.Text.Trim(), txt_Pwd.Text.Trim())))
122                         {
123                             try
124                             { sqlconnstr = conn.ConnectionString; conn.Open(); bt_Login.Enabled = true; AcceptButton = bt_Login; }
125                             catch
126                             { MessageBox.Show("服务器连接失败!"); }
127                         }
128                     }
129                     else//windows身份验证过
130                     {
131                         using (SqlConnection conn = new SqlConnection(string.Format(@"Data Source={0};database = master;Integrated security = true", txt_Server.Text.Trim())))
132                         {
133                             try
134                             { sqlconnstr = conn.ConnectionString; conn.Open(); bt_Login.Enabled = true; AcceptButton = bt_Login; }
135                             catch
136                             { MessageBox.Show("服务器连接失败!"); }
137                         }
138                     }
139                     break;
140                 case "bt_Login"://登陆
141                     Frm_ReadExcel show = new Frm_ReadExcel(sqlconnstr);
142                     show.Show();
143                     Hide();
144                     break;
145                 default:
146                     break;
147             }
148         }
149         #endregion
150 
151         #endregion
152 
153         
154     }
155 }

登录后进入导入界面如下:

实现的源代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Data.OleDb;
  5 using System.Data.SqlClient;
  6 using System.Windows.Forms;
  7 
  8 namespace Winform_SqlBulkCopy
  9 {
 10     public partial class Frm_ReadExcel : Form
 11     {
 12         #region 全局变量
 13         DataSet ds;
 14         string[] tablenames;
 15         SqlConnection conn;
 16         string connstr;
 17         List<SqlBulkCopyColumnMapping> SqlBulkCopyparameters;
 18         #endregion
 19 
 20         #region 构造函数
 21         /// <summary>
 22         /// 构造函数
 23         /// </summary>
 24         /// <param name="_connstr">sqlserver连接字符串</param>
 25         public Frm_ReadExcel(string _connstr)
 26         {
 27             connstr = _connstr;
 28             InitializeComponent();
 29             Load += new EventHandler(Frm_ReadExcel_Load);
 30         }
 31         #endregion
 32 
 33         #region 窗体加载
 34         void Frm_ReadExcel_Load(object sender, EventArgs e)
 35         {
 36             Init();
 37             EventHand();
 38         }
 39         #endregion
 40 
 41         #region 初始化
 42         void Init()
 43         {
 44             conn = new SqlConnection(connstr);//SqlConnection实例化
 45             MaximizeBox = false;//禁用最小化
 46             MaximumSize = MinimumSize = Size;//固定当前大小
 47             txt_filepath.ReadOnly = true;
 48             com_databasename.DropDownStyle = com_tablename.DropDownStyle = ComboBoxStyle.DropDownList;//下拉框只可选
 49             try
 50             {
 51                 conn.Open();
 52                 using (SqlCommand cmd = conn.CreateCommand())
 53                 {
 54                     cmd.CommandText = @"select name from sysdatabases";
 55                     SqlDataReader reader = cmd.ExecuteReader();//获取所有数据库
 56                     while (reader.Read()) com_databasename.Items.Add(reader[0].ToString());
 57                     if (com_databasename.Items.Count > 0) com_databasename.SelectedIndex = 0;
 58                 }
 59             }
 60             catch (Exception ex)
 61             { MessageBox.Show(ex.Message); }
 62             finally
 63             { conn.Close(); }
 64         }
 65         #endregion
 66 
 67         #region 控件事件挂接
 68         void EventHand()
 69         {
 70             com_databasename.SelectedIndexChanged += new EventHandler(com_databasename_SelectedIndexChanged);
 71             bt_see.Click += new EventHandler(bt_see_Click);
 72             bt_next.Click += new EventHandler(btn_next_Click);
 73             bt_SetColumns.Click += new EventHandler(bt_SetColumns_Click);
 74             bt_ok.Click += new EventHandler(bt_ok_Click);
 75             bt_instruction.Click += new EventHandler(bt_instruction_Click);
 76             dgv_show.DataError += new DataGridViewDataErrorEventHandler(dgv_show_DataError);
 77             FormClosing += new FormClosingEventHandler(Frm_ReadExcel_FormClosing);
 78         }
 79         #endregion
 80 
 81         #region 控件事件响应
 82         #region 修改数据库
 83         /// <summary>
 84         /// 修改数据库
 85         /// </summary>
 86         /// <param name="sender"></param>
 87         /// <param name="e"></param>
 88         void com_databasename_SelectedIndexChanged(object sender, EventArgs e)
 89         {
 90             try
 91             {
 92                 conn.Open();
 93                 conn.ChangeDatabase(com_databasename.Text.Trim());//更换数据库(connection内置方法)
 94                 using (SqlCommand cmd = conn.CreateCommand())
 95                 {
 96                     cmd.CommandText = @"select name from sysobjects where xtype='u'";
 97                     SqlDataReader reader = cmd.ExecuteReader();//获取所选数据库中的所有表
 98                     com_tablename.Items.Clear();
 99                     while (reader.Read()) com_tablename.Items.Add(reader[0].ToString());
100                     if (com_tablename.Items.Count > 0) com_tablename.SelectedIndex = 0;
101                 }
102             }
103             catch (Exception ex)
104             {
105                 MessageBox.Show(ex.Message);
106             }
107             finally
108             {
109                 conn.Close();
110             }
111         }
112         #endregion
113 
114         #region 选择Excel文件
115         /// <summary>
116         /// 选择Excel文件
117         /// </summary>
118         /// <param name="sender"></param>
119         /// <param name="e"></param>
120         void bt_see_Click(object sender, EventArgs e)
121         {
122             try
123             {
124                 OpenFileDialog open = new OpenFileDialog();
125                 open.Filter = "WPS表格(*.et)|*.et|Excel2007(*.xlsx)|*.xlsx|Excel2003(*.xls)|*.xls|所有文件(*.*)|*.*";
126                 open.ShowDialog();//选择文件
127                 txt_filepath.Text = open.FileName;
128                 ReadExcel(open.FileName, 0);
129             }
130             catch (Exception ex)
131             {
132                 MessageBox.Show(ex.Message);
133             }
134         }
135         #endregion
136 
137         #region 选择下一个单元表
138         /// <summary>
139         /// 选择下一个单元表
140         /// </summary>
141         /// <param name="sender"></param>
142         /// <param name="e"></param>
143         void btn_next_Click(object sender, EventArgs e)
144         {
145             int index = 0;
146             if (tablenames.Length <= 0) { MessageBox.Show("请选择有效的数据源"); return; }
147             for (int i = 0; i < tablenames.Length; i++)
148                 if (tablenames[i].Substring(0, tablenames[i].Length - 1) == lb_tablename.Text.Substring(3, lb_tablename.Text.Length - 3)) index = i;
149             if (index == tablenames.Length - 1) index = 0;
150             else index++;
151             ReadExcel(txt_filepath.Text, index);
152         }
153         #endregion
154 
155         #region 数据列设置
156         /// <summary>
157         /// 数据列设置
158         /// </summary>
159         /// <param name="sender"></param>
160         /// <param name="e"></param>
161         void bt_SetColumns_Click(object sender, EventArgs e)
162         {
163             List<string> ExcelColumns = new List<string>();
164             List<string> SqlColumns = new List<string>();
165             //获取数据原的列头
166             DataTable dt = (DataTable)dgv_show.DataSource;
167             if (dt == null) { MessageBox.Show("请选择数据源"); return; }
168             foreach (DataColumn column in dt.Columns) ExcelColumns.Add(column.ColumnName);
169             //获取数据表的列头
170             if (string.IsNullOrEmpty(com_databasename.Text.Trim()) || string.IsNullOrEmpty(com_tablename.Text.Trim()))
171             { MessageBox.Show("请选择数据库"); return; }
172 
173             try
174             {
175                 conn.Open();
176                 conn.ChangeDatabase(com_databasename.Text);//更换数据库
177                 using (SqlCommand cmd = conn.CreateCommand())
178                 {
179                     cmd.CommandText = @"select name from syscolumns where id in                                                                                    (select id from sysobjects where name=@name) ";
180                     cmd.Parameters.Add(new SqlParameter("@name", com_tablename.Text.Trim()));
181                     using (SqlDataReader reader = cmd.ExecuteReader())
182                         while (reader.Read()) SqlColumns.Add(reader[0].ToString());
183                 }
184                 Frm_SetColumns frm_show = new Frm_SetColumns(ExcelColumns, SqlColumns);
185                 frm_show.DeleteSet = GetColumns;
186                 frm_show.ShowDialog();
187             }
188             catch (Exception ex)
189             {
190                 MessageBox.Show(ex.Message);
191             }
192             finally
193             {
194                 conn.Close();
195             }
196         }
197         #endregion
198 
199         #region 委托、获取参数
200         /// <summary>
201         /// 委托、获取参数
202         /// </summary>
203         void GetColumns(List<SqlBulkCopyColumnMapping> _SqlBulkCopyparameters)
204         {
205             SqlBulkCopyparameters = _SqlBulkCopyparameters;
206         }
207         #endregion
208 
209         #region SqlBulkCopy导入数据
210         /// <summary>
211         /// SqlBulkCopy导入数据
212         /// </summary>
213         /// <param name="sender"></param>
214         /// <param name="e"></param>
215         void bt_ok_Click(object sender, EventArgs e)
216         {
217             if (SqlBulkCopyparameters == null)
218             { MessageBox.Show("参数未设置!"); return; }
219             try
220             {
221                 DateTime begin = DateTime.Now;
222                 conn.Open();
223                 conn.ChangeDatabase(com_databasename.Text.Trim());//重新指定数据库
224                 SqlBulkCopy bulkcopy = new SqlBulkCopy(conn);
225                 foreach (SqlBulkCopyColumnMapping columnsmapping in SqlBulkCopyparameters)
226                     bulkcopy.ColumnMappings.Add(columnsmapping);//加载文件与表的列名
227                 bulkcopy.DestinationTableName = com_tablename.Text.Trim();//指定目标表的表名
228                 DataTable table = (DataTable)dgv_show.DataSource;//获取要Copy的数据源
229                 bulkcopy.WriteToServer(table);//将table Copy到数据库
230                 DateTime end = DateTime.Now;
231                 string mgr = string.Format("服务器:{0}\n数据库:{1}\n表名:{2}\n共复制{3}条数据\n耗时{4}毫秒",
232                 conn.DataSource, com_databasename.Text, com_tablename.Text.Trim(),
233                 table.Rows.Count, (end - begin).TotalMilliseconds);
234                 MessageBox.Show(mgr);//弹出信息
235             }
236             catch (Exception ex)
237             {
238                 MessageBox.Show(ex.Message);
239             }
240             finally
241             { conn.Close(); }
242         }
243         #endregion
244 
245         #region 说明
246         /// <summary>
247         /// 说明
248         /// </summary>
249         /// <param name="sender"></param>
250         /// <param name="e"></param>
251         void bt_instruction_Click(object sender, EventArgs e)
252         {
253             string mgr = string.Format("1.Excel文件的第一行为列名,用于与数据表匹配\n2.导入之前请先设置列名的对应关系!\n");
254             MessageBox.Show(mgr, "说明");
255         }
256         #endregion
257 
258         #region 结果集数据处理
259         /// <summary>
260         /// 结果集数据处理
261         /// </summary>
262         /// <param name="sender"></param>
263         /// <param name="e"></param>
264         void dgv_show_DataError(object sender, DataGridViewDataErrorEventArgs e)
265         { MessageBox.Show(e.Exception.Message, "结果集提示"); }
266         #endregion
267 
268         #region 窗体关闭
269         /// <summary>
270         /// 窗体关闭
271         /// </summary>
272         /// <param name="sender"></param>
273         /// <param name="e"></param>
274         void Frm_ReadExcel_FormClosing(object sender, FormClosingEventArgs e)
275         {
276             Application.Exit();
277         }
278         #endregion
279 
280         #endregion
281 
282         #region 自定义方法
283         /// <summary>
284         /// 读取Excel
285         /// </summary>
286         /// <param name="filename">文件名(含格式)</param>
287         /// <param name="index">页数(默认0:第一页)</param>
288         void ReadExcel(string filename, int index)
289         {
290             using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";" + "Extended Properties=Excel 8.0;"))
291             {
292                 conn.Open();
293                 DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
294                 tablenames = new string[table.Rows.Count];
295                 for (int i = 0; i < table.Rows.Count; i++) tablenames[i] = table.Rows[i][2].ToString();//获取Excel的表名
296                 if (tablenames.Length <= 0)
297                 { MessageBox.Show("Excel中没有表!"); return; }
298                 using (OleDbCommand cmd = conn.CreateCommand())
299                 {
300                     lb_tablename.Text = "表名:" + tablenames[index].Substring(0, tablenames[index].Length - 1);
301                     cmd.CommandText = "select * from [" + tablenames[index] + "]";
302                     ds = new DataSet();
303                     using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
304                     {
305                         da.Fill(ds, tablenames[index]);
306                         dgv_show.DataSource = ds.Tables[0];
307                     }
308                 }
309             }
310         }
311 
312         #endregion
313 
314       
315     }
316 }

配置列名的界面如下:

实现源代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.Data.SqlClient;
 10 
 11 namespace Winform_SqlBulkCopy
 12 {
 13     public partial class Frm_SetColumns : Form
 14     {
 15         #region 全局变量
 16         /// <summary>
 17         /// 委托
 18         /// </summary>
 19         public Action<List<SqlBulkCopyColumnMapping>> DeleteSet;
 20         List<string> ExcelColumns, SqlColumns;
 21         #endregion
 22 
 23         #region 构造函数
 24         /// <summary>
 25         /// 构造函数
 26         /// </summary>
 27         /// <param name="_ExcelColumns">Excel列</param>
 28         /// <param name="_SqlColumns">数据库列</param>
 29         public Frm_SetColumns(List<string> _ExcelColumns, List<string> _SqlColumns)
 30         {
 31             ExcelColumns = _ExcelColumns;
 32             SqlColumns = _SqlColumns;
 33             InitializeComponent();
 34             Load += new EventHandler(SetColumns_Load);
 35         }
 36         #endregion
 37 
 38         #region 窗体加载
 39         /// <summary>
 40         /// 窗体加载
 41         /// </summary>
 42         /// <param name="sender"></param>
 43         /// <param name="e"></param>
 44         void SetColumns_Load(object sender, EventArgs e)
 45         {
 46             Init();
 47             EventHand();
 48         }
 49         #endregion
 50 
 51         #region 初始化
 52         /// <summary>
 53         /// 初始化
 54         /// </summary>
 55         void Init()
 56         {
 57             MaximizeBox = false;
 58             MaximumSize = MinimumSize = Size;
 59             foreach (string item in ExcelColumns) listbox_Excel.Items.Add(item);
 60             foreach (string item in SqlColumns) listbox_Ssms.Items.Add(item);
 61             if (ExcelColumns.Count != SqlColumns.Count) Text += "(字段数量不匹配)";
 62         }
 63         #endregion
 64 
 65         #region 控件事件挂接
 66         /// <summary>
 67         /// 控件事件挂接
 68         /// </summary>
 69         void EventHand()
 70         {
 71             //Excel控制
 72             lb_Excel_First.Click += new EventHandler(lb_Click);
 73             lb_Excel_Before.Click += new EventHandler(lb_Click);
 74             lb_Excel_Next.Click += new EventHandler(lb_Click);
 75             lb_Excel_Last.Click += new EventHandler(lb_Click);
 76             lb_Excel_Del.Click += new EventHandler(lb_Click);
 77             //Sql控制
 78             lb_Sql_First.Click += new EventHandler(lb_Click);
 79             lb_Sql_Before.Click += new EventHandler(lb_Click);
 80             lb_Sql_Next.Click += new EventHandler(lb_Click);
 81             lb_Sql_Last.Click += new EventHandler(lb_Click);
 82             //确定
 83             bt_OK.Click += new EventHandler(bt_OK_Click);
 84         }
 85         #endregion
 86 
 87         #region 控件事件响应
 88         void lb_Click(object sender, EventArgs e)
 89         {
 90             object excelitem = listbox_Excel.SelectedItem;
 91             object sqlitem = listbox_Ssms.SelectedItem;
 92             int excelindex, sqlindex;
 93             switch ((sender as Label).Name)
 94             {
 95                 //Excel
 96                 case "lb_Excel_First":
 97                     if (excelitem == null) return;
 98                     excelindex = listbox_Excel.SelectedIndex;
 99                     if (excelindex <= 0) return;
100                     listbox_Excel.Items.Remove(listbox_Excel.SelectedItem);
101                     listbox_Excel.Items.Insert(0, excelitem);
102                     listbox_Excel.SelectedIndex = 0;
103                     break;
104                 case "lb_Excel_Before":
105                     if (excelitem == null) return;
106                     excelindex = listbox_Excel.SelectedIndex;
107                     if (excelindex <= 0) return;
108                     listbox_Excel.Items.Remove(listbox_Excel.SelectedItem);
109                     listbox_Excel.Items.Insert(excelindex - 1, excelitem);
110                     listbox_Excel.SelectedIndex = excelindex - 1;
111                     break;
112                 case "lb_Excel_Next":
113                     if (excelitem == null) return;
114                     excelindex = listbox_Excel.SelectedIndex;
115                     if (excelindex >= listbox_Excel.Items.Count - 1) return;
116                     listbox_Excel.Items.Remove(listbox_Excel.SelectedItem);
117                     listbox_Excel.Items.Insert(excelindex + 1, excelitem);
118                     listbox_Excel.SelectedIndex = excelindex + 1;
119                     break;
120                 case "lb_Excel_Last":
121                     if (excelitem == null) return;
122                     excelindex = listbox_Excel.SelectedIndex;
123                     if (excelindex >= listbox_Excel.Items.Count - 1) return;
124                     listbox_Excel.Items.Remove(listbox_Excel.SelectedItem);
125                     listbox_Excel.Items.Insert(listbox_Excel.Items.Count - 1, excelitem);
126                     listbox_Excel.SelectedIndex = listbox_Excel.Items.Count - 1;
127                     break;
128                 case "lb_Excel_Del":
129                     if (excelitem == null) return;
130                     excelindex = listbox_Excel.SelectedIndex;
131                     if (excelindex >= listbox_Excel.Items.Count) return;
132                     listbox_Excel.Items.Remove(listbox_Excel.SelectedItem);
133                     listbox_Excel.SelectedIndex = listbox_Excel.Items.Count - 1;
134                     break;
135                 //Sql
136                 case "lb_Sql_First":
137                     if (sqlitem == null) return;
138                     sqlindex = listbox_Ssms.SelectedIndex;
139                     if (sqlindex <= 0) return;
140                     listbox_Ssms.Items.Remove(listbox_Ssms.SelectedItem);
141                     listbox_Ssms.Items.Insert(0, sqlitem);
142                     listbox_Ssms.SelectedIndex = 0;
143                     break;
144                 case "lb_Sql_Before":
145                     if (sqlitem == null) return;
146                     sqlindex = listbox_Ssms.SelectedIndex;
147                     if (sqlindex <= 0) return;
148                     listbox_Ssms.Items.Remove(listbox_Ssms.SelectedItem);
149                     listbox_Ssms.Items.Insert(sqlindex - 1, sqlitem);
150                     listbox_Ssms.SelectedIndex = sqlindex - 1;
151                     break;
152                 case "lb_Sql_Next":
153                     if (sqlitem == null) return;
154                     sqlindex = listbox_Ssms.SelectedIndex;
155                     if (sqlindex >= listbox_Ssms.Items.Count - 1) return;
156                     listbox_Ssms.Items.Remove(listbox_Ssms.SelectedItem);
157                     listbox_Ssms.Items.Insert(sqlindex + 1, sqlitem);
158                     listbox_Ssms.SelectedIndex = sqlindex + 1;
159                     break;
160                 case "lb_Sql_Last":
161                     if (sqlitem == null) return;
162                     sqlindex = listbox_Ssms.SelectedIndex;
163                     if (sqlindex >= listbox_Ssms.Items.Count - 1) return;
164                     listbox_Ssms.Items.Remove(listbox_Ssms.SelectedItem);
165                     listbox_Ssms.Items.Insert(listbox_Ssms.Items.Count - 1, sqlitem);
166                     listbox_Ssms.SelectedIndex = listbox_Ssms.Items.Count - 1;
167                     break;
168                 default: break;
169             }
170         }
171 
172         private void bt_OK_Click_1(object sender, EventArgs e)
173         {
174 
175         }
176 
177         void bt_OK_Click(object sender, EventArgs e)
178         {
179             if (listbox_Excel.Items.Count != listbox_Ssms.Items.Count)
180             { MessageBox.Show("Excel表格与数据库的列不相同,不能保存!"); return; }
181             List<SqlBulkCopyColumnMapping> list = new List<SqlBulkCopyColumnMapping>();
182             for (int i = 0; i < listbox_Excel.Items.Count; i++)
183                 list.Add(new SqlBulkCopyColumnMapping(listbox_Excel.Items[i].ToString(), listbox_Ssms.Items[i].ToString()));
184             DeleteSet(list);
185             DialogResult = DialogResult.OK;
186         }
187         #endregion
188     }
189 }

以上便是该案例的核心代码,具体项目源代码可在百度云盘下载,地址:http://pan.baidu.com/s/1mhUXzi4,如遇到需要交流的地方,欢迎下方留言。

 

推荐阅读