从Excel导入到SQL Server中的特定列

我想从Excel工作表中导入特定的列,并将其插入到SQL Server表中的特定列中。

下面的代码不会插入任何数据到表中,我认为,因为主要的东西它显示在网格视图中的数据成功,但没有插入数据,所以我想插入到一列不是整个表:

protected void ImportButton_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName); string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName); string FolderPath = ConfigurationManager.AppSettings["FolderPath"]; string FilePath = Server.MapPath(FolderPath + FileName); FileUpload1.SaveAs(FilePath); Import_To_Grid(FilePath); } } private void Import_To_Grid(string FilePath) { string conStr = ""; //switch (Extension) //{ // case ".xls": //Excel 97-03 // conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"] // .ConnectionString; // break; // case ".xlsx": //Excel 07 // conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"] // .ConnectionString; // break; //} String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", FilePath); conStr = String.Format(excelConnString, FilePath); OleDbConnection connExcel = new OleDbConnection(conStr); OleDbCommand cmdExcel = new OleDbCommand(); OleDbDataAdapter oda = new OleDbDataAdapter(); DataTable dt = new DataTable(); cmdExcel.Connection = connExcel; //Get the name of First Sheet connExcel.Open(); DataTable dtExcelSchema; dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close(); //Read Data from First Sheet connExcel.Open(); cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); using (OleDbDataReader dReader = cmdExcel.ExecuteReader()) { using (SqlBulkCopy sqlBulk = new SqlBulkCopy(_Conn.ConnStr())) { //Set your Destination table name sqlBulk.DestinationTableName = "[AIS].[Inventory].[Inventory_Movments_TBL]"; sqlBulk.WriteToServer(dt); //Bind Data to GridView GridView1.Caption = Path.GetFileName(FilePath); GridView1.DataSource = dt; GridView1.DataBind(); } } connExcel.Close(); } 

我build议你使用SqlConnection如下(除非你已经在'_Conn'variables中有一个SqlConnection):

  using (SqlConnection con = new SqlConnection(_Conn.ConnStr())) { using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) { //Set the database table name sqlBulkCopy.DestinationTableName = "dbo.tblPersons"; //Might be a good idea to map excel columns with that of the database table (optional) sqlBulk.ColumnMappings.Add("Id", "PersonId"); sqlBulk.ColumnMappings.Add("Name", "Name"); con.Open(); // these might be the issue since you need to open.. sqlBulk.WriteToServer(dtExcelData); con.Close(); // ..and close the connection } } 

另外我会从这里删除打开和closures的连接:

 connExcel.Close(); //Read Data from First Sheet connExcel.Open(); cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); 

在填充之后closures一个连接(并删除底部的'connExcel.Close()'):

 //Read Data from First Sheet cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); connExcel.Close();