C# 从Excel2003将数据导入到SQL2005,数据发生截断的问题分析

问题描述:大家没有遇到过这种情况使用自己编写的工具读取Excel2003文件中的数据,然后执行插入语句将数据批量导入到SQL2005.

一定有人遇到过数据截断的情况,大多数的原因是因为,数据库中的字段设置的太小导致的,只要稍微修改下就能解决。

但是下面的情况发生的原因是在读取Excel2003文件中的数据式,发生的读取数据截断,这种情况该怎么解决呢?

首先屡一下导入数据的思路,

将Excel2003加载到DataTable,或者你直接使用DataReader一行一行的从Excel2003问价中读取,读取一条插入一条

然后直接你的SQL语句导入;这样基本就ok了!

读取Excel2003文件的核心代码如下

我们采用两种方式 DataTable的方式和DataReader的方式

 public class Conmmon
{
/// <summary>
/// 读取excel文件获得DataTable
/// </summary>
/// <param name="strExcelFileName">目标Excel文件完全路径</param>
/// <param name="strSheetName">工作表的名字</param>
/// <returns></returns>
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
string strExcel = "select * from [" + strSheetName + "$]"; DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);
return ds.Tables[strSheetName];
}
}
/// <summary>
/// 读取excel文件获得DataReader
/// </summary>
/// <param name="strExcelFileName"></param>
/// <param name="strSheetName"></param>
/// <returns></returns>
public static OleDbDataReader ExcelToDataReader(string strExcelFileName, string strSheetName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';"; string strExcel = "select * from [" + strSheetName + "$]";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand cmd = new OleDbCommand(strExcel, conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
catch (System.Data.OleDb.OleDbException e)
{
throw new Exception(e.Message);
}
}
}

ok!如果代码有什么问题,请大家指出来!

下面我们开始使用上面的代码输出一下“测试数据文件.xls”文件中的内容【在下面下载和源代码一起】

//使用DataTable的方式
private void btnTest_Click(object sender, EventArgs e)
{
DataTable myT = Conmmon.ExcelToDataTable(this.txtExcel.Text, "Content");
object obj = null;
foreach (DataRow myrow in myT.Rows)
{
obj = myrow["qvod"];
txtResult.AppendText(obj.ToString() + "\n");
}
}

ok !
我们看一下测试的结果

通用使用DataReader也是同样的结果哦,大家有可以下载我下面的 【源码包】 自行测试哦

嘿嘿!不要以为就这样完了!

好戏才刚刚开始!

我们将刚刚的第14行数据!复制一下,粘贴在第一行,【可以查看"测试数据2.xls"】

我们在重复上面的步骤 显示输出一下

至此问题描述完毕!原因我还没有找到,如果代码没有问题话那就是 数据驱动程序了问题了 瞎猜了,

我调试过程序,14行数据其实是完全读取了,但是放在循环语句中就不行了,

那么是Excel2003文件的问题吗?  我设置单元格格式 为 文本 也没有效果

希望能有高手协助,也许原因就是很小的一个地方引起的。我已经在园子内提问了,但是还没有找到方法。

附上源代码和测试数据

http://files.cnblogs.com/Sky-cloudless/DemoExcel.rar

 
 
分类: C#

C# 从Excel2003将数据导入到SQL2005,数据发生截断的问题分析的更多相关文章

  1. Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具 ...

  2. mysql数据导入导出与数据表优化

    一.数据导入 mysqlimport -uroot oa d:/aa.txt --fields-terminated-by=, --fields-optionally-enclosed-by= --l ...

  3. KUDU数据导入尝试一:TextFile数据导入Hive,Hive数据导入KUDU

    背景 SQLSERVER数据库中单表数据几十亿,分区方案也已经无法查询出结果.故:采用导出功能,导出数据到Text文本(文本>40G)中. 因上原因,所以本次的实验样本为:[数据量:61w条,文 ...

  4. Hive数据导入HBase引起数据膨胀引发的思考

    最近朋友公司在做一些数据的迁移,主要是将一些Hive处理之后的热数据导入到HBase中,但是遇到了一个很奇怪的问题:同样的数据到了HBase中,所占空间竟增长了好几倍!详谈中,笔者建议朋友至少从几点原 ...

  5. 大数据入门到精通19--mysql 数据导入到hive数据中

    一.正常按照数据库和表导入 \\前面介绍了通过底层文件得形式导入到hive的表中,或者直接导入到hdfs中,\\现在介绍通过hive的database和table命令来从上层操作.sqoop impo ...

  6. pl/sql 如何将Excel文件数据导入oracle的数据表?

    1.准备导入数据的excel文件 注意:excel列名和数据表列名必须相同,excel文件sheet2和sheet3可以删除 1)excel文件格式 2)数据表格式 2.打开pl/sql ,找到工具- ...

  7. GridView数据导入Excel/Excel数据读入GridView

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] 效果图: 解决方案:页面增加一个按钮,单击事件添加如下方法:protected void Button1_Clic ...

  8. oracle数据导入/导出

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份.   大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据 ...

  9. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

随机推荐

  1. 完整详细的说明GCD列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f

    为什么要写这个系列,由于百度了一下.我们正在寻找一个非常比较片面的Blog.抄来抄去,写作是很粗糙. 所以,我想写这个系列,尝试记录官方网站GCD强大的全功能的表达.为了方便他们,也方便他人,假设有发 ...

  2. Swift中文教程(五)--对象和类

    原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...

  3. vim插件管理器vundle

    安装:  git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle set nocompatible " be i ...

  4. Java-继承特性

    继承的特点: 1.提高了代码的复用性. 2.让类与类之间发生了关系,有了这个关系,才有了多态的特性. (注意:千万不要为了获取其他类的功能,简化代码而继承:必须是类与类之间有所属关系才可以继承,所属关 ...

  5. Cocos2d-x学习笔记(14)(更新函数scheduleUpdate、进度计时器CCProgressTo、滚动视图CCScrollView)

    一.scheduleUpdate 1.scheduleUpdate:此函数是CCNode的函数,每一个CCNode仅仅要调用scheduleUpdate更新函数,那么这个CCNode就会响应当前类的u ...

  6. 基于HTTP/2和protobuf的RPC框架:GRPC

    谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC Google 刚刚开源了grpc,  一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobu ...

  7. EasyUI基础知识Draggable(拖累)

    学习前easyui基于解析器,装载机.对他们来说,入门阶段,我们只需要在一个简单的理解.第一阶段,不宜过深后,.接着,根据easyui订购的文件正在研究安排官方网站Draggable插入. Dragg ...

  8. PHP经验——获得PHP版本信息及版本比较

    原文:PHP经验--获得PHP版本信息及版本比较 偶然看到别人写的一句代码: <?php if (version_compare("5.2", PHP_VERSION, &q ...

  9. MyEclipse 设置全部jsp的编码为UFT-8 的方法

  10. 2. SQL Server数据库状态监控 - 错误日志

    原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯 ...