`
44289533
  • 浏览: 65076 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C# webService 批量导入sqlserver(导入临时表,再导入主表)

阅读更多
近期课题需要把 批量数据从Sqlite倒出发送到webservice 然后 用 存储过程 插入到sqlserver 考虑到wifi不稳定,效率问题,在网上查了一些资料,然后使用了下面的方法

首先,我传到webService的是一个数据的字符串,根据特定的符号进行切割,得到一条条数据,然后放到DataTable 里面,再用SqlBulkCopy 类来批量插入到sqlserver。
插入速度很快,网络好的话1.5W条数据用时也就10秒,非常满意。

    这个方法唯一导致慢的地方就是传给webservice的问题,网路不好的话传输很慢,所以在使用这个机能的时候,我限制了信号强度,使之能更快,更安全的处理数据。
  
    出现过一个问题,还没找到原因:
   System.InvalidOperationException: 目的のテーブル 'Temp__172_17_3_157' にアクセスできません。 ---> System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。

说是 临时表**无法访问,一直没找到原因,初步分析是,临时表被占用,在整个流程处理结束需要删除临时表的时候,删除失败。 如果各位有解决方案不妨说下共同进步!


引用
using (SqlBulkCopy bulk = new SqlBulkCopy(this.conn))
                {
                    bulk.BulkCopyTimeout = 20; //插入超时
                    bulk.DestinationTableName = tableName;//目标表
                    bulk.ColumnMappings.Add("coloum1", "coloum1");//目标表的列名,与dt里的列名匹配,建议用一个名字
                    bulk.ColumnMappings.Add("coloum2", "coloum2");
                    ...
                    bulk.ColumnMappings.Add("coloumN", "coloumN");
                    bulk.WriteToServer(datatable);//执行写入
                }
                if (bulk != null)
                {
                    bulk.Close();
                }

很简单,这里就写这么多,最后别忘记关闭资源
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics