【问题标题】:Excel reports to database sql server 2005Excel 报告到数据库 sql server 2005
【发布时间】:2011-08-09 15:36:52
【问题描述】:

我每天都会收到 excel 表,并希望将它们上传到具有完全相同列名的现有数据库中,我想在 sql server 2005 中执行此操作,但后来我认为创建一个 asp 会更容易。 net 程序可以自动执行此操作,这样管理人员就可以自己执行此操作。

我会使用批量插入吗?

我将如何将 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

【问题讨论】:

  • 为什么不将该列设置为 Excel 工作表中的文本。现在,它是您的 Excel 表中的日期字段,这就是为什么当我们从 Excel 查询时它会转换为日期时间。
  • 我试过有没有办法在 sql 中做到这一点
  • 当您从 Excel 中选择数据时,选择 Convert(Varchar,FieldName),尝试类似.. 但我不确定。
  • 嗯,将字段更改为文本的问题是将其转换为十进制奇怪

标签: asp.net vb.net sql-server-2005 excel import


【解决方案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);
        }
}

【讨论】:

  • 谢谢我让它工作,但我面临一个问题,也许你可以帮忙
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2010-10-05
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多