首页 新闻 赞助 找找看

excel数据存入sqlserver过程中,遇到Datetime的格式问题。

0
悬赏园豆:30 [已解决问题] 解决于 2013-12-02 17:10

先讲一下我实现的大致思路:

<1>读取excel数据,赋值到datatable中,然后在页面上显示

       细节描述:有一些列是存到数据库时要是datetime格式的,我在赋值到datatable时也是做                      如下处理的

                   DataColumn dtColumn = new DataColumn();               

                   dtColumn.DataType =System.Type.GetType("System.DateTime");

<2>将datatable存到sqlserver中

      2.1使用带参数的存储过程,这种方法我已经实现(一行一行插入的,遇到datetime那一列            也是一样可以插入的,并可以在sqlserver中查看)

      2.2在使用SqlBulkCopy时(想尽可能提高效率),遇到如下错误

           实现细节描述:

            

string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            using(SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
                {
                    bulkCopy.DestinationTableName = "dbo.*****";
                    try
                    {
                        bulkCopy.WriteToServer(dt);
                    }
                    catch (Exception ex)
                    {

                        Response.Write(ex.Message);
                    }
                    
                }
            }

 

遇到如下错误:

         The given value of type String from the data source cannot be converted to                type datetime of the specified target column.RunTime

 

现在就是卡在使用sqlbulkcopy上,求大家支招。小弟不胜感激

问题补充:

页面显示已经使用存储过程存入都已经实现

挨踢男.Orz的主页 挨踢男.Orz | 菜鸟二级 | 园豆:387
提问于:2013-12-02 15:37
< >
分享
最佳答案
0

亲...数据转换出错了...代码不够详细,没办法指出哪个地方,你这个错误提示是在哪出现的

收获园豆:30
源坊 | 初学一级 |园豆:9 | 2013-12-02 15:54

使用epplus读取excel,并返回datatable,datatable中每一列的格式也设置好了,这里都没有问题。

而且使用存储过程存入数据也没有问题。

问题在于使用SqlBulkCopy时,问题出在bulkCopy.WriteToServer(dt);这里的dt就是excel数据返回的(在页面显示数据也ok)

转换错误这个比较郁闷(我也是这么理解的),用存储过程ok的呀,而且查看这一列的数据类型也是System.DateTime

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:03

@我是挨踢男: dbo.*****,,,这写的表名字对吗

源坊 | 园豆:9 (初学一级) | 2013-12-02 16:17

@源坊: 这必须对啊,故意打码的。

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:18

@我是挨踢男: 唉,,,好吧,,我只知道最后一个问题了,如果还不是,我就没辙了,你的表中有自增长列不

源坊 | 园豆:9 (初学一级) | 2013-12-02 16:21

@源坊: 有啊 ID

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:22

@源坊: 上面是是具体错误信息,为什么用存储过程就行,用sqlbulkcopy就不行呢?

            用存储过程插入到数据库时字段(datetime)也是合法的呀

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:25

@我是挨踢男: 那你datatable里有吗

源坊 | 园豆:9 (初学一级) | 2013-12-02 16:25

@源坊: 有啊,可以在页面上查看的

上面第二第三列就是时间

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:28

@我是挨踢男: datatable里加上那一列吧

源坊 | 园豆:9 (初学一级) | 2013-12-02 16:28

@源坊: 加上哪一列?

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 16:56

@我是挨踢男: 在你的dt中加上ID列,没有数据没关系,但要加上去

源坊 | 园豆:9 (初学一级) | 2013-12-02 16:59

@源坊: ok我试试看

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 17:00

@源坊: 感谢感谢,是我粗心了,WriteToServer(dt)是这一行的所有数据都往里面写的,存储过程没有id这一个,难怪会有这个奇葩的错误。纠结了好久,再次感谢。

SqlBulkCopy果然比存储过程效率高

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2013-12-02 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册