CSDN经常有网友发贴询问对于Excel的导入导出问题,针对Excel操作.Net本身提供了类库,可以通过创建工作区等等相关操作来进行Excel编程,但其实Excel本身就是微软Office家族的成员,它还可以视为数据库,那么我们大可以通过sql文来做些文章。当然sql操作Excel还是有其限制,不能成为绝对的替代方案,读者需要视自己的需求情况而定。
1.将数据库数据导入Excel
//代码片断
string strCmd = string.Empty; ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=No';" + "Data Source= " + "C:/Documents and Settings/Administrator桌面/test.xls"); //注意连接字符串中的相关参数
![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) OleDbCommand cmd = new OleDbCommand(); ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) cmd.Connection = conn; ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) conn.Open(); ![](http://image109.360doc.com/DownloadImg/2020/06/1518/193043735_1_20200615061448193.gif) strCmd = "create Table [Sheet1]("; foreach (DataColumn dc in ds.Tables[0].Columns) //假设数据库中数据已加载至数据集ds中
![](http://pubimage.360doc.com/wz/default.gif) ...{ ![](http://pubimage.360doc.com/wz/default.gif) strCmd += "[" + dc.ColumnName + "] nvarchar(20),"; //获取列名信息,拼写sql文,创建表
![](http://pubimage.360doc.com/wz/default.gif) } ![](http://pubimage.360doc.com/wz/default.gif) strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1); ![](http://pubimage.360doc.com/wz/default.gif) strCmd += ")"; ![](http://pubimage.360doc.com/wz/default.gif) cmd.CommandText = strCmd; ![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) cmd.ExecuteNonQuery(); ![](http://pubimage.360doc.com/wz/default.gif) foreach (DataRow dr in ds.Tables[0].Rows) ![](http://pubimage.360doc.com/wz/default.gif) ...{ if (dr.RowState != System.Data.DataRowState.Deleted) ![](http://pubimage.360doc.com/wz/default.gif) ...{ ![](http://pubimage.360doc.com/wz/default.gif) strCmd = "insert into [Sheet1] values("; foreach (DataColumn dc in ds.Tables[0].Columns) ![](http://pubimage.360doc.com/wz/default.gif) ...{ ![](http://pubimage.360doc.com/wz/default.gif) strCmd += "'" + dr[dc.ColumnName].ToString() + "',"; ![](http://pubimage.360doc.com/wz/default.gif) } ![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) strCmd = strCmd.Substring(0, strCmd.Length - 1); ![](http://pubimage.360doc.com/wz/default.gif) strCmd += ")"; ![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) cmd.CommandText = strCmd; //获取数据,拼写sql文,插入数据
![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) cmd.ExecuteNonQuery(); ![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) ![](http://pubimage.360doc.com/wz/default.gif) } ![](http://pubimage.360doc.com/wz/default.gif) } ![](http://pubimage.360doc.com/wz/default.gif) conn.Close();
2.将Excel中部分内容导入SqlServer数据库
首先这里说的部分内容是针对列,假设Excel有N列,而我们只需要把关心的几列内容导入SqlServer的表中
// 利用Opendatasource函数将excel导入sqlserver
string strSQL = "SELECT userId,username INTO usertable FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=d:/test.xls;Extended Properties=Excel 8.0')...[Sheet1$]"; //将sheet1中userId,和username两列导入本地sqlserver的SCSIM库usertable表中,注意sql语句,此列语句表示sqlserver当前还没有usertable表
![](http://pubimage.360doc.com/wz/default.gif) OleDbConnection scon = new OleDbConnection("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=SCSIM;User ID=sa;Password="); //注意自行配置sqlserver连接字符串
![](http://pubimage.360doc.com/wz/default.gif) scon.Open(); ![](http://pubimage.360doc.com/wz/default.gif) OleDbCommand scmd = new OleDbCommand(strSQL, scon); ![](http://pubimage.360doc.com/wz/default.gif) scmd.ExecuteNonQuery(); ![](http://pubimage.360doc.com/wz/default.gif) scon.Close();
|