2011-04-20 75 views
1

我每天都会收到excel表格,想要将它们上传到现有的数据库中,并使用完全相同的列名,我想在sql server 2005中执行此操作,但后来我认为它会是更容易创建一个可以自动执行此操作的asp.net程序,这样管理员就可以自己完成这项任务。Excel报告到数据库SQL服务器2005

我会使用批量插入吗?

以及如何将Excel表导入到数据表?

编辑: 我得到的第一部分工作

handling time 
1:12:53 
1:06:29 
0:10:58 
0:13:33 
1:15:45 
0:41:19 

那是我在我的excel工作表中的一个(HH:MM:SS)

然而

当我这样做的散装复制到一个varchar字段

我得到

12/30/1899 1:12:53 AM 
12/30/1899 1:06:29 AM 
12/30/1899 12:10:58 AM 
12/30/1899 12:13:33 AM 
12/30/1899 1:15:45 AM 
12/30/1899 12:41:19 AM 
+0

为什么不把那个列在Excel工作表中的文本。现在,它是Excel表单中的日期字段,这就是为什么我们从Excel查询时转换为日期时间。 – 2011-04-20 17:08:24

+0

我试过,有没有办法在sql – whatsupprogrammers 2011-04-20 17:13:37

+0

当你从Excel中选择数据,选择转换(Varchar,FieldName),尝试类似..但我不知道。 – 2011-04-20 17:16:32

回答

1

是的,我会建议你使用SqlBulkCopy的

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); 
      DbDataAdapter adapter = factory.CreateDataAdapter(); 
      DbCommand selectCommand = factory.CreateCommand(); 
      selectCommand.CommandText = "SELECT ColumnNames FROM [Sheet1$]"; 
      DbConnection connection = factory.CreateConnection(); 
      connection.ConnectionString = connectionString; 
      selectCommand.Connection = connection; 
      adapter.SelectCommand = selectCommand; 
      DataTable dtbl = new DataTable(); 
      adapter.Fill(dtbl); 

      if (dtbl.Rows.Count > 0) 
{ 
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destConnection)) 
     { 
      bulkCopy.ColumnMappings.Add("ColumnName", "ColumnName"); 
      bulkCopy.ColumnMappings.Add("ColumnName", "ColumnName"); 

      bulkCopy.DestinationTableName = "DBTableName"; 
      bulkCopy.WriteToServer(dtblNew); 
     } 
} 
+0

感谢我得到它的工作,但我面临的一个问题,也许你可以帮助 – whatsupprogrammers 2011-04-20 17:00:15

+0

我将发布顶部 – whatsupprogrammers 2011-04-20 17:00:36