c#如何实现excel导入到sqlserver,如何实现从sqlserver导出到exc

对于从sqlserver中导入、导出excel,虽然sqlserver已经给了较为简单的方式,通过交互式的对话框形式实现,但是有时这种方式存在的很多问题,比方说导入、导出数据不全。而且,对于一个项目而言,我们都不希望功能的实现离开该软件程序。因此,我们便想着用程序来实现sqlserver的导入导出。

一、从sqlserver中导出excel表

我们将查出的数据首先要保存到数据表中DataTable,这里我就不具体说明如何从查出结果,存放到DataTable中了,相信网上有很多实现的例子。

接下拉我们做的就是先找到存放这个文件的路径,代码如下:

这段代码,意思是看是否存在文件夹,如果存在,则查看是否存在文件,如果不存在文件夹或者文件,都将进行创建。

private void exportout_Click(object sender, EventArgs e){Helper helper = new Helper();//这是我自己写的类,具体你可以不用看,只知道它是用来获取Debug路径的就可以了。具体代码看我上一篇文章:Global.filepath = helper.GetAssemblyFileDirectory()+@"\Excel";if (!Directory.Exists(Global.filepath)){Directory.CreateDirectory(Global.filepath);}saveFile=Global.filepath +=@"\党员基本信息表.xlsx";if (!File.Exists(saveFile)){File.Create(saveFile);}Global.ExportExcel(partyMemberTable, Global.filepath);//调用导出excel函数,partyMemberTable为存储查询结果的DataTable。Global是我定义的一个全局类,里面有全局变量和函数,这里我将实现导出excel函数也放在了里面。}导出excel函数具体实现如下: public static void ExportExcel(System.Data.DataTable dt,String saveFile ){object objectMissing;objectMissing = System.Reflection.Missing.Value;//将一个默认值返回个objectMissingif (dt == null || dt.Rows.Count == 0) return;Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();//创建Excel应用程序。if (xlApp == null){return;}//System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;//System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;//创建一个工作簿集合对象。Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(objectMissing);//创建一个新的工作簿Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;//创建一个工作表对象。Microsoft.Office.Interop.Excel.Range range;//创建一个excel表格的范围对象。long totalCount = dt.Rows.Count; //获取导出数据行数long rowRead = 0;float percent = 0;此段代码为表格标题列内容for (int i = 0; i < dt.Columns.Count; i++){worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;//excel的行列是从1开始的range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];range.Interior.ColorIndex = 15; //15号字体range.Font.Bold = true;//粗体}此段代码为将数据表中的内容导入到excel表中,因此是从第二行开始的for (int r = 0; r < dt.Rows.Count; r++){for (int i = 0; i < dt.Columns.Count; i++){worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();}rowRead++;percent = ((float)(100 * rowRead)) / totalCount;}// xlApp.Visible = true;try{//因为在之前我们已经创建了excel表,但是之前那个还没有数据,因此需要保存。msdn上介绍了save的用法,“当第一次保存excel表示用SaveAs来进行保存文件,下边具体的参数含义,可以具体参照msdn介绍的WookBool.SaveAs()方法”workbook.SaveAs(saveFile, objectMissing, objectMissing, objectMissing, objectMissing, objectMissing,XlSaveAsAccessMode.xlShared, objectMissing, objectMissing, objectMissing, objectMissing, objectMissing);}catch(Exception ex){MessageBox.Show("有错误:"+ex.ToString());}MessageBox.Show("保存成功!");xlApp.Quit();//关闭程序。//xlApp.}这样我们就完成了数据库中数据导出到excel中。

二、从Excel表中将数据导入到sqlserver中

首先,我们需要确定的是,excel表中的表列名应该和数据库中的表列名相一致。

这里我先讲解一下实现过程的原理:创建一个DataTable,首先将excel表与DataTable进行创建连接,将excel表中的数据保存到DataTable中,然后用sql语句进行循环的一行行插入到sqlserver中。

具体实现代码如下:

这里我创建了一个按钮,通过按钮的点击事件进行处理

private void exportin_Click(object sender, EventArgs e){DataTable dt = new DataTable();//创建一个DataTable表,用于存储从excel表中读取的数据OpenFileDialog open = new OpenFileDialog();//创建一个打开文件窗口类if(open.ShowDialog()==DialogResult.OK){string fileName = open.FileName;//获取选取的文件,这里你也可以用过滤方式,过滤一下文件类型。bind(dt,fileName);//excel表中数据导入到DataTable中过程函数}}将excel中的数据导入到DataTable中private void bind(DataTable table,string fileName){/*1.数据库引擎:microsoft.ace.oledb.12.0和Microsoft.Jet.OLEDB.4.0*2.Extended Properties:扩展属性, Excel中8.0为07以上至03,Excel 12.0为07和10*3.HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,,则表示第一行不是标题,做为数据来使用。系统默认的是YES\*4.IMEX ( IMport EXport mode )设置  IMEX 有三种模式:  0 is Export mode  1 is Import mode  2 is Linked mode (full update capabilities)  我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。意义如下:0 —输出模式;1—输入模式;2—-链接模式(完全更新能力)*/string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +"Data Source=" + fileName + ";" +"Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";//String sheetName = "党员基本信息表";String excelStr =String.Format("select * from [党员基本信息表$]");//这里是sheet表名OleDbDataAdapter da = new OleDbDataAdapter( excelStr,strConn);DataSet ds = new DataSet();//创建数据集,数据集这里你可以看作包含多个数据表try{da.Fill(ds);//将excel表中的数据保存到DataTable中。table = ds.Tables[0];//this.dataGridView1.DataSource = dt;}catch (Exception err){MessageBox.Show("操作失败!" + err.ToString());}foreach(DataRow dr in table.Rows){insertToSql(dr);//此函数是将数据表table中的数据一行行的插入到sqlserver中。}}将数据表中的数据插入到sqlserver中private void insertToSql(DataRow dataRow ){//1、Data Source:数据库引擎名,一般用(lcoal),如果设置了实例,则用.\实例名方式。//2、Initial Catalog:数据库名字//3、User ID:用户名//4、Password:密码;其它的不做过多解释了,可以不用写string connString = @"Data Source=.\SQLSERVER2008R2;Initial Catalog=organization;Persist Security Info=False;User ID=sa;Password=123;Min Pool Size=10;Max Pool Size=1000";SqlConnection conn = new SqlConnection(connString);//创建连接conn.Open();//打开连接//数据库sql语句String sqlstring = "use Organization insert into partyMembers(memberID,memberName,sex,cardID,birthDate,nation,nativePlace,politicalStatus,education,"+ "partyDate,orgID,branchID,depID,duty,beginYear,endYear,editor,editTime,parentOrg,audit,auditTime,status,remark) "+ "values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}',"+ "'{10}','{11}','{12}','{13}',{14},{15},'{16}','{17}','{18}','{19}',"+ "'{20}','{21}','{22}')";sqlstring = String.Format(sqlstring,Convert.ToString(dataRow["memberID"]), Convert.ToString(dataRow["memberName"]),Convert.ToString(dataRow["sex"]), Convert.ToString(dataRow["cardID"]),Convert.ToDateTime(dataRow["birthDate"]).ToString("yyyy-MM-dd"),Convert.ToString(dataRow["nation"]), Convert.ToString(dataRow["nativePlace"]),Convert.ToString(dataRow["politicalStatus"]), Convert.ToString(dataRow["education"]),Convert.ToDateTime(dataRow["partyDate"]).ToString("yyyy-MM-dd"),Convert.ToString(dataRow["orgID"]), Convert.ToString(dataRow["branchID"]),Convert.ToString(dataRow["depID"]), Convert.ToString(dataRow["duty"]),Convert.ToString(dataRow["beginYear"]), Convert.ToString(dataRow["endYear"]),Convert.ToString(dataRow["editor"]),DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),Convert.ToString(dataRow["parentOrg"]), Convert.ToString(dataRow["audit"]),Convert.ToString(dataRow["auditTime"]), Convert.ToString(dataRow["status"]),Convert.ToString(dataRow["remark"]));SqlCommand command = new SqlCommand(sqlstring, conn);command.ExecuteNonQuery();//执行sql语句}这里我列出在编写从excel表中导入到sqlserver中的一些问题,希望这些说明可以对你在做本操作时有用

1、

偶尔为街头独特的风景驻足,

c#如何实现excel导入到sqlserver,如何实现从sqlserver导出到exc

相关文章:

你感兴趣的文章:

标签云: